125.验证回文串
我的解法:
双指针法:
首先使用left和right两个指针分别指向字符串首尾;
外部while循环保证 left<right,内部分别使用while循环找出此时最左和最右的字母数字字符(使用自定义函数 isLegal 来判断字符是否是大小写字母或数字,可以直接用c++自带的isalnum函数);
比较两指针所指向字符的小写形式是否一致,不同则直接返回false;
cpp
class Solution {
bool isLegal(char ch){
if((ch >= '0' && ch <= '9') ||
(ch >= 'A' && ch <= 'Z') ||
(ch >='a' && ch <= 'z')){
return true;
}
return false;
}
public:
bool isPalindrome(string s) {
int n = s.size();
int left = 0, right = n - 1;
while(left < right){
while(left < right && !isLegal(s[left])){
left++;
}
while(left < right && !isLegal(s[right])){
right--;
}
if(left < right){
if(tolower(s[left]) != tolower(s[right])){
return false;
}
left++;
right--;
}
}
return true;
}
};