Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
本题为检测一个字符串是否回文,注意非数字和字母不算在内,直接跳过,且忽略大小写不同。
解法:设定两个指针,分别指向左字符、右字符,遇到非数字字母设置while()函数跳过,且大小写进行统一化。
易错点:
1、在定位左右字符时,要注意while()条件要设置为左字符位置小于右字符,否则“,。”类型会误判。
2、判断是否为字母或数字:islnum()函数
3、将大小写字母统一化为大写字母:toupper()函数
bool isPalindrome(string s) {
if(s.size()==0) return true;
for(int i=0,j=s.size()-1; i<j; i++,j--){
while(!isalnum(s[i]) && i<j) i++;
while(!isalnum(s[j]) && i<j) j--;
if(toupper(s[i])!=toupper(s[j])) return false;
}
return true;
}