题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
c++ 方法:
用 isalpha()函数(功能:如果参数是字母字符,函数返回非零值,否则返回零值。)、isdigit(int c)宏(若参数c 为阿拉伯数字,则返回true,否则返回null(0)) 判断是否为字母or数字,或者用条件 :
(s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')
代码:
class Solution {
public:
bool isPalindrome(string s) {
int i = 0, j = s.size() - 1;
while(i < j){
if(isalpha(s[i]) || isdigit(s[i]));
else{
++i;
continue;
}
if(isalpha(s[j]) || isdigit(s[j]));
else{
--j;
continue;
}
if(s[i] >= 'a') s[i] -= 32;
if(s[j] >= 'a') s[j] -= 32;
if(s[i] == s[j]){
++i;
--j;
}
else
return false;
}
return true;
}
};
python方法:
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
isalnum() 方法检测字符串是否由字母和数字组成。
lower() 方法转换字符串中所有大写字符为小写。
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = list(filter(str.isalnum, str(s.lower())))
return s == s[::-1]
使用正则表达式
re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern[, flags])
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.sub用于替换字符串中的匹配项。
语法:
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
"""
a = re.compile('[^A-Z^a-z^0-9^]').sub('', s).lower()
return a == a[::-1]
参考链接:http://www.runoob.com/python/python-reg-expressions.html