回文报输出的意外真值

时间:2019-04-08 14:16:58

标签: python

我写这样的问题来解决回文问题

class Solution:
    def isPalindrome(self, s: str) -> bool:
        import re
        s1 = re.findall(r"[a-z]", s.lower())
        s2 = list(reversed(s1))        
        logging.debug(f"s1: {s1}, s2:{s2}, {s1==s2}")
        return s1 == s2

运行测试并成功

$ python 125.ValidPalindrome_str_easy.py MyCase.test_c
DEBUG s1: ['o', 'p'], s2:['p', 'o'], False
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

但使用leetcode

enter image description here

程序不可能输出True。

1 个答案:

答案 0 :(得分:1)

您的功能实际上并不产生回文,这就是测试失败的原因。

请按照以下步骤操作:

In [1]: import re
In [2]: s = "0P"
In [3]: re.findall(r"[a-z]", s.lower())
Out[3]: ['p']                             # This is `s1`
In [4]: list(reversed(_))
Out[4]: ['p']                             # This is `s2`

如您所见,它们是相同的。因为正在使用的正则表达式已删除数字(0-9)字符。您只查看字符a-z,如果您只想反转字符串而不使用re,那么您会没事的。


def is_palindrome(s):
    return s == s[::-1]

这可以通过将字符串切成-1的步骤来进行反转。

In [6]: is_palindrome("0P")
Out[6]: False
In [7]: is_palindrome("madam")
Out[7]: True