问题描述
给定一个字符串 s
,判断它是否是回文,只考虑字母数字字符,忽略大小写。
为什么下面的解决方案不接受某些测试用例?
s = "".join(s)
s = s.lower()
if s==s[::-1]:
return "true"
else:
return "false"
输入:s = "A man,a plan,a canal: Panama"
输出:true
此测试用例被接受:
输入:s = "race a car"
输出:false
此测试用例返回 true 而不是 false
解决方法
目前这两种情况都是returning false。
根据问题中的这一部分
仅考虑字母数字字符并忽略大小写。
您可以首先使用 re.sub 和模式 [^a-zA-Z0-9]+
从字符串中删除所有非字母数字字符,该模式匹配除列出的字母数字范围之外的所有字符。
import re
strings = [
"race a car","A man,a plan,a canal: Panama"
]
for s in strings:
s = re.sub(r"[^a-zA-Z0-9]+","","".join(s).lower())
if s == s[::-1]:
print("true: for {0}".format(s))
else:
print("false: for {0}".format(s))
输出
false: for raceacar
true: for amanaplanacanalpanama
,
如果你不打算使用正则表达式,你可以使用 isalnum() 字符串方法:
s = ''.join(element for element in s if element.isalnum()).lower()
if s==s[::-1]:
print("true")
else:
print("false")
,
所有都返回 false,因为您没有删除空格和特殊字符...
A man,a canal: Panama
变成:amanap :lanac a,nalp a,nam a