如何验证回文串
思考:
其实方法都很简答都是将非字母的字符去掉后再进行反转判断或用双指针前后一个个比较。
如果不用isalnum函数和tolower函数的话可以再构造一个函数来进行操作。
方法一-直接筛选
class Solution {
public:
bool isPalindrome(string s) {
//直接筛选判断
string str;
for(auto ch :s)
{
if(isalnum(ch)) //利用isalnum函数判断是否为数组或字母
str+=tolower(ch); //利用tolower函数转化为小写
}
string str_rev(str.rbegin(),str.rend()); //反转
return str_rev == str;
}
};
方法二-双指针法
class Solution {
public:
bool isPalindrome(string s) {
//双指针法
string str;
for(auto ch : s) //都变成小写,除去非字母字符
{
if(isalnum(ch)) str+=tolower(ch);
}
int left =0,right = str.size()-1;
while(left<right)
{
if(str[left++] != str[right--]) return false;
//一个指针从前往后 一个从后往前
}
return true;
}
};