📅  最后修改于: 2023-12-03 15:37:15.333000             🧑  作者: Mango
给定一个字符串,编写一个函数来检查它是否是回文。一个回文是一个字符串,它的正反两侧都是一样的。
例子:
输入: "racecar"
输出: true
输入: "hello"
输出: false
def isPalindrome(s: str) -> bool:
# 先将字符全部转换成小写
s = s.lower()
# 指针i、j分别指向字符串首尾
i, j = 0, len(s) - 1
while i < j:
# 若指针i指向非字母字符,则向后移动一位
if not s[i].isalnum():
i += 1
continue
# 若指针j指向非字母字符,则向前移动一位
if not s[j].isalnum():
j -= 1
continue
# 若指针i、j所指向的字符不相同,则返回False
if s[i] != s[j]:
return False
# 指针i、j继续向中间移动
i += 1
j -= 1
# 若所有字符都被判断完毕,返回True
return True
该函数的主要思路是使用双指针扫描字符串,每次比较指针所指向的字符是否相同,若不同则返回False。在比较之前,为了避免大小写的干扰,我们将全部字符转化成小写。在比较字符之前,还需要判断其是否为字母或数字,若不是则需要向前或向后移动指针。最终,若双指针扫描完全后两端的字符均相同,则为回文,返回True。