【问题标题】:Why all the testcases are not passing? palindrome program为什么所有的测试用例都没有通过?回文程序
【发布时间】:2021-04-20 15:14:17
【问题描述】:
给定一个字符串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
这个测试用例返回的是真而不是假
【问题讨论】:
标签:
python
python-3.x
string
pointers
data-structures
【解决方案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
Python demo
【解决方案2】:
如果你不打算使用正则表达式,你可以使用 isalnum() 字符串方法:
s = ''.join(element for element in s if element.isalnum()).lower()
if s==s[::-1]:
print("true")
else:
print("false")
【解决方案3】:
所有都返回 false,因为您没有删除空格和特殊字符...
A man, a plan, a canal: Panama 变为:amanap :lanac a ,nalp a ,nam a