原题
给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。
在这个题目中,我们将空字符串判定为有效回文。
解题思路
- 两个指针的问题,对撞型指针
- 一个从前往后,一个从后往前,判断如果不是数字或者字母则跳过
# 如果是数字或者字母返回 true
"test".isalnum()
完整代码
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
l, r = 0, len(s) - 1
while l < r:
while l < r and not s[l].isalnum():
l += 1
while l < r and not s[r].isalnum():
r -= 1
if s[l].lower() != s[r].lower():
return False
l += 1
r -= 1
return True