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
相关产品推荐
相关产品推荐

