文章目录
链接
思路
之前的思路是,先把不是字母数字的符号去掉,然后再将剩余的序列逆序,最后比较是否一致。但是感觉也不是很好操作。因为要删除
c
不知道数组长度,不会用
python
1.
这里需要创建一个新的数组来储存,直接在原数组上del会有些麻烦,因为原数组改变了。
class Solution:
def isPalindrome(self, s: str) -> bool:
new = []
for ch in list(s):
j = 0
# 如果不是数字字母的话
if not ch.isalnum():
pass
elif ch.isalpha():
new.append(ch.lower())
else:
new.append(ch)
new2 = list(reversed(new))
return (new == new2)
将列表翻转,还可以
new2 = new1[::-1]
2.
1.的简单写法
*可以最后再统一大小写,不用每一步都统一
class Solution:
def isPalindrome(self, s: str) -> bool:
s = ''.join(i for i in s if i.isalnum()).lower()
return s == s[::-1]
3.
双指针法
class Solution:
def isPalindrome(self, s: str) -> bool:
left = 0
right = len(s) - 1
while left < right:
if not s[left].isalnum():
left += 1
continue
if not s[right].isalnum():
right -= 1
continue
if s[left].lower() == s[right].lower():
left += 1
right -=1
else:
break
return right <= left