You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 125题:Python正则匹配字母数字失效,求有效解法

解决方案:LeetCode 125. Valid Palindrome

方案1:双指针法(高效无依赖)

这种方法不依赖正则表达式,直接通过双指针遍历字符串两端,跳过非字母数字字符后比较对应位置的字符,时间复杂度O(n),空间复杂度O(1),适合处理大长度输入。

def isPalindrome(s: str) -> bool:
    left = 0
    right = len(s) - 1
    while left < right:
        # 左指针跳过非字母数字字符
        while left < right and not s[left].isalnum():
            left += 1
        # 右指针跳过非字母数字字符
        while left < right and not s[right].isalnum():
            right -= 1
        # 转小写后比较字符
        if s[left].lower() != s[right].lower():
            return False
        left += 1
        right -= 1
    return True

说明:isalnum()方法直接判断字符是否为字母或数字,比正则更可靠,也避免了正则语法出错的问题。

方案2:修正后的正则表达式写法

如果坚持使用正则,确保正则表达式准确匹配所有非字母数字字符,避免之前的语法错误:

import re

def isPalindrome(s: str) -> bool:
    # 移除所有非字母数字字符并转小写
    cleaned_str = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
    # 判断处理后的字符串是否等于其反转
    return cleaned_str == cleaned_str[::-1]

说明:[^a-zA-Z0-9]精准匹配所有非字母数字的字符,替换为空后转小写,最后通过字符串反转比较判断是否为回文。

内容的提问来源于stack exchange,提问作者Delicia Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:57:07