题目:
思路1
使用切片的思路去做,首先对字符串s进行处理,将其中的大写字母变成小写字母,去除空格,特殊符号,只保留数字和字母,记为s1。之后将s1进行翻转,即if s1 == s1[::-1]
,相同则True,不同则False。
代码如下:
class Solution:
def isPalindrome(self, s: str) -> bool:
s1 = []
for i in s:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z' or '0' <= i <= '9':
s1.append(i.lower()) # 将字母变成小写
s1 = "".join(s1)
if s1 == s1[::-1]:
return True
else:
return False
思路2
利用双指针,首先和上面的做法一样,对字符串s进行处理得到s1。然后设置left,right左右指针,判断指针处的字符是否相同即可。
代码如下
class Solution:
def isPalindrome(self, s: str) -> bool:
s1 = []
for i in s:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z' or '0' <= i <= '9':
s1.append(i.lower()) # 将字母变成小写
s1 = "".join(s1)
left, right = 0, len(s1) - 1 # 设置双指针
while left < right:
if s1[left] != s1[right]:
return False
left += 1
right -= 1
return True