微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决回文无法通过所有测试用例

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

Python demo

,

如果你不打算使用正则表达式,你可以使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。