【leetcode125】验证回文串
题目概述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
解决方案
bool isPalindrome(string s) {
// 遍历字符串,删掉非数字,非大小写字母
string :: iterator it;
for(it = s.begin(); it < s.end(); it++)
{
if((*it >= 'A' && *it <= 'Z' ) || (*it >= 'a' && *it <= 'z') || (*it >= '0' && *it <= '9'))
{
// 把大写字符调整为小写,方便回文对比
if (*it >= 'A' && *it <= 'Z')
*it = *it + 32;
continue;
}
else
{
s.erase(it);
it--;
}
}
//回文对比,注意i的终结是中间
for(int i = 0; i < int(s.size() / 2); i++)
{
if(s[i] != s[s.size() - 1 -i] )
return false;
}
return true;
}
注意事项
- 大小写字符ASCII码相差32,大写从65开始,小写从97开始
- 存在数字和大写字符相差32的情况(比如:‘0’(48)和‘P’(80)),故需要把大写字符转化为小写字符后在做对比