当前位置: 首页 > 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; 
}

http://www.dtcms.com/a/55473.html

相关文章:

  • 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控制量子比特!
  • 0.大模型开发知识点需求综述
  • C++文档识别接口如何实现 高效办公
  • Vim复制内容到系统剪切板
  • C++Primer学习(5.4和5.5 迭代语句和跳转语句)
  • 深入解析 dig 命令:DNS 查询与故障排除利器
  • MySQL------存储引擎和用户和授权
  • 【javaEE】多线程(基础)
  • MySQL主从架构配合ShardingJdbc实现读写分离
  • uniapp项目运行失败Error: getaddrinfo *.bspapp.com 文件查找失败uview-ui及推荐MarkDown软件 Typora
  • PyTorch全精度训练和混合精度训练简单对比:全精度训练一定比混合精度训练更准确吗?