题目
题目来源
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串
思路
根据题意可得,只需要考虑字母和数字即可,所以编写一个预处理函数,仅保留字母和数字,并对大写字母进行处理转为小写字母。
得到处理后的数组,直接利用前后对比即可。
相关思考
这题思路比较清晰,没有什么容易混淆的点
代码(C++/原创)
class Solution {
public:
bool isPalindrome(string s) {
if(s.size()==0) return true;
//int length=s.size();
vector<char> ans=preLetters(s);
if(ans.size()==0) return true;
int length=ans.size();
int k=0;
for(int i=0;i<=length/2;i++)
{
if(ans[i]!=ans[length-1-i])
{
k=1;
break;
}
}
if(k!=0) return false;
else return true;
}
private:
vector<char> preLetters(string s) //预处理
{
int length=s.size();
vector<char> ans;
int temp=0;
for(int i=0;i<length;i++)
{
if('a'<=s[i]&&'z'>=s[i]) ans.emplace_back(s[i]);
else if('A'<=s[i]&&'Z'>=s[i]) ans.emplace_back(s[i]-'A'+'a');
else if('0'<=s[i]&&'9'>=s[i]) ans.emplace_back(s[i]);
else continue;
}
return ans;
}
};