验证回文串

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。
相关推荐
程序猿编码22 分钟前
工业视觉多任务方案:可编程梯度信息视觉框架,训练评估 + C++ 部署完整实战
开发语言·c++·视觉·推理引擎
言乐61 小时前
Python实现语音审核模型
开发语言·python·django·virtualenv·pygame
朝朝辞暮i2 小时前
C++ 第 21 课:struct —— 把一组相关数据打包在一起
开发语言·c++·算法
青梅橘子皮2 小时前
Blue---二分算法(二分查找与二分答案)
算法
长河2 小时前
Java的GC(垃圾回收)中,标记无用对象的核心方法是可达性分析算法
java·jvm·算法
月光船幽幽2 小时前
加性偏移外推提升参数识别可靠性
python·算法
SHARK_pssm2 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
凯哥Java2 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
H.莓飛3 小时前
【数据结构】队列
linux·数据结构·centos
Ivanqhz3 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法