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

[附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.kler.cn/a/577184.html

相关文章:

  • 清理内存,还得靠它
  • 蓝桥杯备赛:炮弹
  • 网关相关配置
  • wireshark点击快捷无法打开
  • 使用 Arduino 和 ThingSpeak 通过 Internet 进行心跳监测
  • 前端表单提交与后端处理全解析:从HTML到Axios与SpringBoot实战
  • C语言——【sizeof 操作符】
  • maven导入spring框架
  • 14 HarmonyOS NEXT UVList组件开发指南(一)
  • HTTPS加密原理详解
  • 如何验证邮件列表的有效性?
  • AI 时代的新宠儿:向量数据库
  • 如何用Kimi生成PPT?秒出PPT更高效!
  • 【C++初阶】类与对象(下)
  • 2025年总结zabbix手动部署过程!
  • 深入理解Linux网络随笔(四):内核是如何与用户进程协作的(下篇:多路I/O复用模型epoll)
  • 大数据与物联网(IoT)的完美融合:驱动智能新时代
  • vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
  • 【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片
  • MySQL中的脏读与幻读:概念、影响与解决方案