思想:首先去除字符串里面所有的空格和标点符号。当所有的空格和标点去除后,将字符串所有字母变成小写。最后取出后面一半字符串并逆序再和前面一半字符比较是否相等。
import re
class Solution:
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
string = re.sub("[._,?;$%^*(+: --`@]", "", s).lower()
backs = string[(len(string)+1)//2:][::-1]
fronts = string[0:len(string)//2]
return backs == fronts
但是测试案例中有多少种标点符号我们是不知道的,我都是放进leetcode运行,出错了再将相应标点加进正则中。这个的方法的局限性就在这里
下面附上大佬的思想(其实我也想到这个啦)
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
start, end = 0, len(s) - 1
while start < end:
if not s[start].isalnum():
start += 1
continue
if not s[end].isalnum():
end -= 1
continue
if s[start].lower() != s[end].lower():
return False
start += 1
end -= 1
return True