验证回文串

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。
相关推荐
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
炫饭第一名1 天前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
进击的尘埃1 天前
Vue3 响应式原理:从 Proxy 到依赖收集,手撸一个迷你 reactivity
javascript
willow1 天前
JavaScript数据类型整理1
javascript
LeeYaMaster1 天前
20个例子掌握RxJS——第十一章实现 WebSocket 消息节流
javascript·angular.js
UIUV1 天前
RAG技术学习笔记(含实操解析)
javascript·langchain·llm
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
FansUnion1 天前
我如何用 Next.js + Supabase + Cloudflare R2 搭建壁纸销售平台——月成本接近 $0
javascript