解题思路:
利用头尾双指针:i ,j 。
需要判断每一个字符是否为字母或数字,c++中对应的函数为 isalnum,如果不是字母或数字,返回0。
c++中判断大小写字母字符的函数是 isalpha,是大写返回1,是小写返回2,不是英文字符返回0。
其实,在一开始可以用c++中的transform 函数,将输入字符串 s 中的字母都转为小写。
class Solution {
public:
bool isPalindrome(string s) {
if(s == "" || s.length() == 1) return true;
int i = 0;
int j = s.length() - 1;
while(i < j){
// 先判断s[i] s[j]是不是字母或数字
if(!isalnum(s[i])){
i++;
continue;
}
if(!isalnum(s[j])){
j--;
continue;
}
//s[i] s[j]都是字母或者数字了
int n1 = isalpha(s[i]);
int n2 = isalpha(s[j]);
//如果其中一个是数字,直接返回false
if(n1 == 0 && n2 > 0 || n1 > 0 && n2 == 0) return false;
else if(n1 == 0 && n2 == 0){
if(s[i] != s[j]) return false;
else{
i++;
j--;
}
}
else if(tolower(s[i]) != tolower(s[j])){
return false;
}
else{
i++;
j--;
}
}
return true;
}
};