Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
题意:判断给定字符串是否为回文串。
设置两个指针,由头尾两端向中间移动,如果判断到所在位置的字符为非字母和数字,使用while循环,但同时要保证两个指针的前后位置没有发生改变。接着按两个指针所指的字符是否字母,数字等进行判断,如果不相等,跳出循环,否则继续下一轮循环。
class Solution {
public:
bool isPalindrome(string s) {
if(s=="")
return true;
int len=s.size();
int i=0,j=len-1;
for(;j-i>=1;i++,j--)
{
while(!isalnum(s[i])&&i<=j)
i++;
while(!isalnum(s[j])&&j>=i)
j--;
if(j<=i)
break;
if(isalpha(s[i])&&isalpha(s[j]))
{
if(tolower(s[i])==tolower(s[j]))
continue;
else
break;
}
else if(isdigit(s[i])&&isdigit(s[j]))
{
if(s[i]==s[j])
continue;
else
break;
}
else
break;
}
if(j>i)
return false;
else
return true;
}
};