思路一
利用filter函数和str.isalnum()函数,筛选出由字母和数字组成的部分,再全部换为小写
class Solution:
def isPalindrome(self, s: str) -> bool:
s = ''.join(filter(str.isalnum, s)).lower()
return s == s[::-1]
思路二
遍历,对于字符和数字,添加到新的字符串中。
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
res = ''
for i in s:
if '0' <= i <= '9' or 'a' <= i <= 'z':
res += i
return res == res[::-1]
思路三
双指针法,指针在两边同时走,遇到不是字符或者数字的就跳过,然后比较左右指针所指元素是否相同,如果都相同,返回True
class Solution:
def isPalindrome(self, s: str) -> bool:
l, r = 0, len(s) - 1
while l < r:
while l < r and not s[l].isalnum():
l += 1
while l < r and not s[r].isalnum():
r -= 1
if s[l].lower() != s[r].lower():
return False
l += 1
r -= 1
return True