题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
样例
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
C++ 代码
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty()) return true; // 空串
// 对原始string清洗
string ss;
for(auto x : s)
{
if(x >= 'a' && x <= 'z' || x >= '0' && x <= '9')
ss += x;
else if(x >= 'A' && x <= 'Z')
{
x = x + 'a' - 'A';
ss += x;
}
}
// 存逆序用stack,另外一种方式也可以直接收尾对换实现翻转
stack<char> sta;
for(auto x : ss)
sta.push(x);
// 比较
int index = 0;
while(!sta.empty())
{
if(sta.top() != ss[index]) return false;
sta.pop(); index++;
}
return true;
}
};