题目:验证回文串
验证回文字符串:正读和反读一个样
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 :
输入: "A man, a plan, a canal: Panama",输出: true
输入: "race a car",输出: false
-------------------------------------------------------------------------------
解法1:通过正则 re.sub() 匹配出字母+数字,再通过 [::-1] 来验证
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re.sub(pattern, repl, string, count=0, flags=0)
参数:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if not s:
return True
import re
# ^表示取反
s = re.sub('[^a-z0-9]', '', s.lower())
return s == s[::-1]
解法2:通过 filter() 函数 和 isalnum() 函数来实现。
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
isalnum() 方法检测字符串是否由字母和数字组成。
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
# filter()是一个惰性函数,需要套用list()来迫使其完成运算。
s = list(filter(str.isalnum, s.lower()))
return s == s[::-1]
参考:
https://www.runoob.com/python/python-reg-expressions.html