方法一:逆向切片法
【思路】
1.将所有的字母转换成小写
2.遍历字符串,将字母或者数字的字符与空字符串拼接,得到一个由全部小写字母组成的新字符串
3.利用切片方法判断字符串正反序是否相等,相等,则是回文字符串,否则,不是回文字符串
遍历字符串方式:普通for循环
判断字母或数字的方法:使用ord()将字符转换成十进制,再将十进制与ASCII码比较(python中只能数字与数字,字母与字母比较)
拼接字符串:使用字符串相加的方式
class Solution:
def isPalindrome(self, s: str) -> bool:
#使用切片
sr = s.lower()
st =""
for each in sr:
if (97 <= ord(each) <= 122) or (48 <= ord(each) <= 57):
st += each
if st == st[::-1]:
return True
else:
return False
遍历字符串方式:普通for循环
判断字母或数字的方法:使用isalnum()方法
拼接字符串:使用字符串相加的方式
class Solution:
def isPalindrome(self, s: str) -> bool:
sr = s.lower()
st =""
for each in sr:
if each.isalnum():
st += each
return st == st[::-1]
sr = s.lower()
st = "".join(each for each in sr if each.isalnum())
return st == st[::-1]
遍历字符串方式:字符串推导式
判断字母或数字的方法:使用isalnum()方法
拼接字符串:使用join()方法
class Solution:
def isPalindrome(self, s: str) -> bool:
#使用切片
sr = s.lower()
st = "".join(each for each in sr if each.isalnum())
return st == st[::-1]
方法二:双指针
【思路】
1.将所有的字母转换成小写
2.遍历字符串(使用字符产推导式),将字母或者数字的字符与空字符串拼接,得到一个由全部小写字母组成的新字符串——(使用方法一的第三种写法)
3.使用一个指向左侧和一个指向右侧的指针(初始指向首和尾),分别向中间移动判断两指针指向元素是否相等,只要有不相等的,则不是回文字符串,否则就是回文字符串
class Solution:
def isPalindrome(self, s: str) -> bool:
#双指针
sr = s.lower()
st = " ".join(each for each in sr if each.isalnum())
n = len(st)
left , right = 0 , n-1
while left < right:
if st[left] != st[right]:
return False
else:
left , right = left + 1,right - 1
return True