回文无法通过所有测试用例

时间:2021-04-20 15:14:17

标签: python python-3.x string pointers data-structures

给定一个字符串 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

3 个答案:

答案 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

Python demo

答案 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

相关问题