给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
# 1、直接在原字符串上进行比较
# 关键在与控制左右指针的大小 确保左小于右
length = len(s)
# 空字符串为回文串
i,j = 0,length-1
# 当j == i 时 已经无须再比较了
while i < j:
# 过滤特殊字符
while i < j and not s[i].isalnum():
i+= 1
while i < j and not s[j].isalnum():
j-= 1
#
if i < j:
if s[i].lower() != s[j].lower(): # 对应位置的字符不相等
return False
i+= 1
j-= 1
return True