题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例2:
输入: “race a car”
输出: false
方法一:
正则表达式匹配,切记导入re模块
import re
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = s.upper()
r1 = re.findall('\w', s)
r2 = []
r2[:] = r1[:]
r1.reverse()
return r1 == r2
方法二:
两个指针,一前一后,进行比较
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
# 字符串为空时,返回True
if not s:
return True
s = s.upper()
i = 0
j = len(s) - 1
while i < j:
# 当s[i]不是字母也不是数字时,向后移动一位
while i < (len(s)-1) and not s[i].isalnum():
i += 1
# 当s[j]不是字母也不是数字时,向前移动一位
while j > -1 and not s[j].isalnum():
j -= 1
if s[i] != s[j]:
return False
else:
i += 1
j -= 1
return True