LeetCode 125. 验证回文串
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
分析
本来想先将输入的字符串处理一下,结果超过内存限制。就只能用双指针在原字符串上计算了。判断指针下一个有效值,然后两个指针所指向的元素判断是否等价。
C++代码
class Solution {
public:
bool isPalindrome(string s) {
int left = 0, right = s.length() - 1;
while(left < right){
while(!isVaild(s[left])){
left++;
if(left >= right)
break;
}
while(!isVaild(s[right])){
right--;
if(right <= left)
break;
}
if(left >= right){
break;
}
if(helper(s[left]) != helper(s[right])){
return false;
}else{
left++;
right--;
}
}
return true;
}
char helper(char c){
if(c >= 'a' && c <= 'z'){
return (char)(c - 'a');
}
if(c >= 'A' && c <= 'Z'){
return (char)(c - 'A');
}
if(c >= '0' && c <= '9'){
return c;
}
return 0;
}
bool isVaild(char c){
if(c >= 'a' && c <= 'z'){
return true;
}
if(c >= 'A' && c <= 'Z'){
return true;
}
if(c >= '0' && c <= '9'){
return true;
}
return false;
}
};