首页 > 解决方案 > 回文中作为输出的意外真实值

问题描述

我写了这样一个问题来解决回文问题

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中

在此处输入图像描述

程序不可能输出 True。

标签: python

解决方案


您的函数实际上并没有产生回文,这就是测试失败的原因。

看这一步:

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

推荐阅读