难度简单319
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true示例 2:
输入: "race a car" 输出: false
1. 利用内置函数 reverse (筛选+判断)
class Solution {
public:
bool isPalindrome(string s) {
string str = "";
for(auto ch: s){
if(isalnum(ch)){
str += tolower(ch);
}
}
string check = str;
reverse(check.begin(), check.end());
return str == check;
}
};
2. 双指针法
双指针法也很好理解,需要注意的是,这题中不能仅仅判断不是数字和字母就指针++,而是需要while循环来判断不是字母和数字时指针变化,因为这个题目里很可能有接着几个非数组和字母。这个和之前的回文串不太一样,其他的都很好理解。
class Solution {
public:
bool isPalindrome(string s) {
int left = 0, right = s.length()-1;
while(left < right){
while(left < right && !isalnum(s[left])){
left++;
}
while(left < right && !isalnum(s[right])){
right--;
}
if(tolower(s[left]) != tolower(s[right])){
return false;
}
left++;
right--;
}
return true;
}
};