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.
给定一个字符串,判断是不是回文,只考虑字母数字字符,并不顾大小写。另外,空串被认为是有效的回文。
后记:1、对大小写不敏感,需要把所有字母小写都转换成大写,或者大写都转换成小写,用toupper()或者tolower函数
2、遇到非字母、数字要跳过,用到isalnum()函数
class Solution {
bool isAlphanum(char x)
{
if(x>='a' && x<='z')
return true;
if(x>='A' && x<='Z')
return true;
if(x>='0' && x<='9')
return true;
return false;
}
char toLower(char x)
{
if(x>='A' && x<='Z')
return 'a'+x-'A';
return x;
}
public:
bool isPalindrome(string s) {
//if(s.empty() || s.size()==0 || s.size()==1)
//return true;
int begin=0,end=s.size()-1;
while(begin<=end)
{
while(begin<end && !isAlphanum(s[begin]))//确定是alphanum
begin++;
while(begin<end && !isAlphanum(s[end]))
end--;
if(toLower(s[begin])!=toLower(s[end]))
return false;
begin++,end--;
}
return true;
}
};