验证回文串

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,就比较 s[left] 和 s[right]
    的字符。如果不相等,说明不是回文串,返回 false。
  • 如果相等,将 left 指针右移一位,right 指针左移一位,继续比较。
  • 当 left 大于等于 right 时,说明已经比较完所有需要比较的字符,字符串是回文串,返回 true。
相关推荐
Sun_light1 分钟前
6个你必须掌握的「React Hooks」实用技巧✨
前端·javascript·react.js
爱学习的茄子3 分钟前
深度解析JavaScript中的call方法实现:从原理到手写实现的完整指南
前端·javascript·面试
百锦再4 分钟前
重新学习Vue中的按键监听和鼠标监听
javascript·vue.js·vue·计算机外设·click·up·down
Tanecious.11 分钟前
LeetCode 876. 链表的中间结点
算法·leetcode·链表
优雅永不过时_v13 分钟前
基于vite适用于 vue和 react 的Three.js低代码与Ai结合编辑器
前端·javascript
Thomas_YXQ15 分钟前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
WildBlue16 分钟前
🧊 HTML5 王者对象 Blob - 二进制世界的魔法沙漏
前端·javascript·html
Wo3Shi4七20 分钟前
哈希冲突
数据结构·算法·go
啷咯哩咯啷21 分钟前
Vue3构建低代码表单设计器
前端·javascript·vue.js
凌览24 分钟前
斩获 27k Star,一款开源的网站统计工具
前端·javascript·后端