题目
    125.验证回文串

    思路
    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    将字符串逆序后于原字符串比较相等,即可。
    image.png
    这个方法需要提前处理符号。

    1. class Solution:
    2. def isPalindrome(self, s: str) -> bool:
    3. # 全部转换成小写字母
    4. # 过滤其他,只保留字母
    5. # 反转字符串
    6. # 比较反转前后反转后是否相等
    7. s = s.lower() # 全部转化成小写
    8. s = list(filter(str.isalnum, s)) # 过滤掉除字母之外的其他元素
    9. print(s)
    10. s_re = reversed(s)
    11. return ''.join(s) == ''.join(s_re)

    另一个思路:对撞指针。分别从前和从后遍历字符串,比较指针left和right所指元素是否相等。

    1. class Solution:
    2. def isPalindrome(self, s: str) -> bool:
    3. n = len(s)
    4. i = 0
    5. j = n-1
    6. while i < j:
    7. if s[i].isalnum() == False:
    8. i += 1
    9. continue
    10. if s[j].isalnum() == False:
    11. j -= 1
    12. continue
    13. if s[i].lower() != s[j].lower():
    14. return False
    15. i += 1
    16. j -= 1
    17. return True