当前位置: 首页 > news >正文

[附JS、Python、C++题解] Leetcode面试150题 (5)

一、题目

125. 验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

二、思路

1. 因为题目中说了正着读和反着读——想到双指针,一个从前往后,一个从后往前。

2. 将大写字符转化为小写字符,非字母字符移除——不同的语言有不同的处理方法,但是不论如何处理,这一步必须在循环遍历开始之前(因为我们要用处理后的数组进行判断)。

3. 返回的是true和false——那个对应的情况更简单就用代码判断哪个。

三、代码

① JavaScript:

function IsHuiwen(s){
    let cleanS = s.toLowerCase().replace(/[^a-z0-9]/g, '');
    let left = 0;
    let right = cleanS.length - 1;
    while (left < right){
        if(cleanS[left] !== cleanS[right]){
            return false;
        }
        left ++;
        right --;
    }
    return true;
}

② Python:

import re
def isHW(s: str) -> bool:
    cleanS = re.sub(r'[^a-z0-9]', '', s.lower())
    left = 0
    right = len(s) - 1
    while left < right :
        if cleanS[left] != cleanS[right]:
            return false
        left += 1
        right -= 1
    return true
    

🧐补充一点:

js代码中的  let cleanS = s.toLowerCase().replace(/[^a-z0-9]/g, '')   和python代码中的   cleanS = re.sub(r'[^a-z0-9]', '', s.lower())   完成的都是“将大写字符转化为小写字符,非字母字符移除”这一步。具体来说:

  • r'[^a-z0-9]' 是一个正则表达式模式,用于匹配所有非字母数字字符
  • [^...]:表示否定字符集,即匹配不在方括号内的字符。
  • a-z:匹配所有小写字母(a 到 z)。
  • 0-9:匹配所有数字(0 到 9)。
  • [^a-z0-9]:匹配所有不是小写字母或数字的字符。

作用是:

  • 将字符串 s 转换为小写。
  • 使用正则表达式 r'[^a-z0-9]' 匹配字符串中的所有非字母数字字符。
  • 将匹配到的非字母数字字符替换为空字符串 '',即移除这些字符
  • g:全局匹配标志,表示匹配字符串中的所有符合条件的部分,而不仅仅是第一个匹配。

③ C++:

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>

bool isHW(const std::string& s) {
    std::string cleanS;
    for (char c : s) {
        if (std::isalnum(c)) { // 如果是字母数字字符
            cleanS += std::tolower(c); // 转换为小写并添加到结果中
        }
    }

    int left = 0;
    int right = cleanS.size() - 1;
    while (left < right) {
        if (cleanS[left] != cleanS[right]) {
            return false; 
        }
        left++;
        right--;
    }

    return true; 
}

相关文章:

  • Odoo最佳业务实践:采购管理概述
  • 20250307学习记录
  • 大模型发展历程
  • C# 在Excel中插入和操作切片器-详解
  • 基于置换对称性的模型融合:实现凸盆地单盆地理论
  • FreeSWITCH 简单图形化界面40 - 使用mod_curl模块进行http请求
  • 【hello git】git rebase、git merge、git stash、git cherry-pick
  • python从入门到精通(二十一):python爬虫实现登录功能
  • Manus AI Agent 技术解读:架构、机制与竞品对比
  • 八点八数字科技:开启数字人应用的无限可能
  • springboot-bug
  • PyQt学习记录04——通过提升法绘制matplot图形
  • Apache XTable:在数据湖仓一体中推进数据互作性
  • Unity场景制作
  • stm32 基于蓝桥物联网赛 oled屏使用
  • Windows 版本Nmap使用报错“无法打开device eth0”
  • GET3D:从图像中学习的高质量3D纹理形状的生成模型
  • 在 k8s中查看最大 CPU 和内存的极限
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加表格空状态提示,带插图的空状态,Table7空状态2
  • 《量子Java:从超导芯片到光子计算的编程革命》——解析Google量子AI中心的混合架构,揭秘如何用Java控制量子比特!
  • 开一个二手车销售网站怎么做/奶盘seo伪原创工具
  • 邹平县城乡建设局网站/2022近期重大新闻事件10条
  • 上海哪里做网站比较好/正规营销培训
  • 资质做网站需要用到什么/如何进行网站性能优化?
  • 国外的网站建设/百姓网推广电话
  • wordpress mail函数/百度推广优化技巧