验证回文串

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!

javascript 复制代码
function isPalindrome(s) {
    // 第一步:将字符串中的所有大写字符转换为小写字符
    s = s.toLowerCase();
    // 第二步:使用正则表达式移除所有非字母数字字符
    s = s.replace(/[^a-z0-9]/g, '');

    // 第三步:使用双指针法判断处理后的字符串是否为回文串
    let left = 0;
    let right = s.length - 1;
    while (left < right) {
        if (s[left]!== s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

// 测试示例
const s1 = "A man, a plan, a canal: Panama";
console.log(isPalindrome(s1)); 

const s2 = "race a car";
console.log(isPalindrome(s2)); 

代码解释

整体思路

要判断一个字符串是否为回文串,我们需要先对字符串进行预处理,将其转换为小写并移除所有非字母数字字符,然后使用双指针法来判断处理后的字符串是否从前往后和从后往前读是一样的。

代码步骤分析

转换为小写:

  • 使用 toLowerCase() 方法将字符串 s 中的所有大写字符转换为小写字符。

移除非字母数字字符:

  • 使用 replace() 方法和正则表达式 /\^a-z0-9/g 来移除字符串中所有非字母数字字符。\^a-z0-9
    表示匹配除了小写字母和数字之外的任何字符,g 标志表示全局匹配,即替换所有匹配的字符。

双指针判断回文串:

  • 初始化两个指针 left 和 right,分别指向字符串的开头和结尾。
  • 使用 while 循环,只要 left 小于 right,就比较 sleft 和 sright
    的字符。如果不相等,说明不是回文串,返回 false。
  • 如果相等,将 left 指针右移一位,right 指针左移一位,继续比较。
  • 当 left 大于等于 right 时,说明已经比较完所有需要比较的字符,字符串是回文串,返回 true。
相关推荐
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
candyTong1 天前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
_柳青杨1 天前
深入理解 JavaScript 事件循环
前端·javascript
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
大家的林语冰2 天前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化
weedsfly2 天前
异步编程全景与事件循环——彻底搞懂 JS 执行机制
前端·javascript
用户1733598075372 天前
纯前端 PDF 数字签名实战:Vue 3 + pdf-lib 在浏览器里完成签名嵌入
前端·javascript
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法