LeetCode有效回文(Valid Palindrome)问题Python解法输出错误求助
代码错误原因分析
- 执行逻辑顺序完全颠倒:你先拿未清洗的原始字符串直接判断是否等于逆序,测试用例的原始字符串包含空格、标点,逆序后和原串完全不一致,会直接进入else分支break,后续的字符串清洗逻辑根本没有执行。
- 正则匹配规则不符合题目要求:题目要求保留字母和数字两类字符,你写的正则
[^a-zA-Z]仅保留字母,会把所有数字过滤掉。 - 替换逻辑写死固定值:
regex.sub('', 'ab3d*E')直接使用了固定字符串ab3d*E做处理,完全没有用到输入的参数s,不管输入什么内容处理的都是这个固定串,逻辑完全错误。 - 返回值类型不匹配:题目要求返回布尔值判断结果,你返回的是处理后的小写字符串,类型不符合要求。
- 多余的for循环无任何意义:循环要么第一次就return,要么第一次就break,整个循环结构完全冗余,import语句写在分支内部也不符合编码规范。
修正后的代码
import re class Solution: def isPalindrome(self, s: str) -> bool: # 清洗字符串:过滤非字母数字字符,统一转小写 s_clean = re.sub(r'[^a-zA-Z0-9]', '', s).lower() # 判断是否为回文 return s_clean == s_clean[::-1]
验证说明
测试用例s = "A man, a plan, a canal: Panama"清洗后得到字符串amanaplanacanalpanama,和自身逆序完全一致,返回结果为True,符合题目预期。
内容的提问来源于stack exchange,提问作者jkjhrmv
相关产品推荐
相关产品推荐

