125. 验证回文串
- 题号:力扣125
- 知识点:双指针,字符串
- 目标完成度:46/150
- 总结
题干:
方法1-双指针:
- 1.由于忽略字母的大小写,首先使用
s = s.lower()
把字符串统一成全部小写 - 2.然后使用双指针,如果左指针和右指针都是指向的数字或字母,判断左右指针指向的字母或数字是否相同,如果相同,则
left += 1, right -= 1
, 继续向中间靠拢;如果不同则返回False
,终止。 - 3.如果左指针不是指向的数字或字母,则
left += 1
。 - 4.如果右指针不是指向的数字或字母,则
right += 1
。 - 5.最后如果
left == right
了,则说明所有的字符都被两个指针遍历了,并且没有发现左右指针不相等的,返回True
,终止 - 6.知识点:
isalnum()
:如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
left = 0
right = len(s)-1
while left < right:
if not s[left].isalnum():
left += 1
if not s[right].isalnum():
right -= 1
if s[left].isalnum() and s[right].isalnum():
if s[left] == s[right]:
left += 1
right -= 1
else:
return False
return True
方法2-筛选字母和数字:
- 1.首先还是把所有字母统一成小写
- 2.然后筛选出字符串中的字母和数字,放入新数组
new_s
中 - 3.如果是回文串,则该数组正序和逆序相等。反之亦然
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
new_s = []
for x in s:
if 'a'<= x <= 'z':
new_s.append(x)
if '0'<= x <= '9':
new_s.append(x)
return new_s == new_s[::-1]