验证回文串

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。
相关推荐
ZTLJQ38 分钟前
序列化的艺术:Python JSON处理完全解析
开发语言·python·json
2401_891482171 小时前
多平台UI框架C++开发
开发语言·c++·算法
88号技师1 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751281 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
㓗冽2 小时前
8皇后·改-进阶题16
数据结构
A_nanda2 小时前
根据AI提示排查vue前端项目
前端·javascript·vue.js
m0_726965982 小时前
面面面,面面(1)
java·开发语言
x_xbx2 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
Darkwanderor2 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920742 小时前
分布式系统安全通信
开发语言·c++·算法