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.
这题的意思就是判断一串字符串是否是回文,只考虑字母数字的情况。alphanumeric 是字母数字的意思,我一开始以为是字母,看我写的那个判断函数名就知道了
,结果可想而知,深深的感到英语这厮对我充满了恶意,
class Solution {
public:
bool isPalindrome(string s) {
int tail = s.length() -1 ;
int head = 0;
while (head < tail)
{
while (!isAlpha(s[tail]) && tail>head)
--tail;
while (!isAlpha(s[head]) && head<tail)
++head;
if ( tolower(s[head]) != tolower(s[tail]))
return false;
++head;
--tail;
}
return true;
}
private:
bool isAlpha( char c)
{
if(('A'<=c && c<='Z')||('a'<=c && c<='z')|| ('0'<=c && c<='9'))
return true;
return false;
}
};