题目要求:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例:
解法一:
该解法为常规解法,先把字符串中空格去掉,再去掉不是字母与数字的然后进行判断,代码如下:
def gupiao(self,s:str):
b=[]
#将字符串中的空格剔除掉
strip_a=a.replace(' ','')
for alpha in strip_a:
if alpha.isalpha():
b.append(alpha.lower())
if alpha.isdigit():
b.append(alpha)
for i,alpha in enumerate(b):
if b[i]!=b[len(b)-i-1]:
return False
return True
解法二:
该解法使用正则,直接只把字母和数字单拿出来,然后再用tmp[::-1]进行逆序判断,代码如下:
def isPalindrome(self,s: str) -> bool:
tmp = re.sub(r"[^A-Za-z0-9]", "", s).lower()
return tmp == tmp[::-1]
解法三:
定义左右两个指针进行判断,代码如下:
def isPalindrome(self, s: str) -> bool:
n = len(s)
left = 0
right = n - 1
while left < right:
while left < right and not s[left].isalnum():
left += 1
while left < right and not s[right].isalnum():
right -= 1
if s[left].lower() != s[right].lower():
return False
left += 1
right -= 1
return True