我写这样的问题来解决回文问题
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。
答案 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