给定一个字符串 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
答案 0 :(得分:1)
目前这两种情况都是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
答案 1 :(得分:1)
如果你不打算使用正则表达式,你可以使用 isalnum() 字符串方法:
s = ''.join(element for element in s if element.isalnum()).lower()
if s==s[::-1]:
print("true")
else:
print("false")
答案 2 :(得分:0)
所有都返回 false,因为您没有删除空格和特殊字符...
A man, a plan, a canal: Panama
变成:amanap :lanac a ,nalp a ,nam a