-----QUESTION-----
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"
"race a car"
Note:
Have you consider that the string might be empty? This is a goodquestion to ask during an interview.
For the purpose of this problem, we define empty string as validpalindrome.
-----SOLUTION-----
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty()) return true;
int sLength = s.length();
int front = -1;
int rear = sLength;
char cFront;
char cRear;
while (1)
{
cFront = s[++front];
cRear = s[--rear];
if(front > rear) break;
if(cFront <= 'Z'&& cFront >='A')
{
cFront +=32;
}
if(cRear <= 'Z'&& cRear >='A')
{
cRear +=32;
}
while( cFront < '0' || (cFront < 'a' && cFront > '9')|| cFront>'z')
{
cFront = s[++front];
if(front >= rear) break;
if(cFront <= 'Z'&& cFront >='A')
{
cFront +=32;
}
}
while( cRear < '0' || (cRear < 'a' && cRear > '9')|| cRear>'z')
{
cRear = s[--rear];
if(front >= rear) break;
if(cRear <= 'Z'&& cRear >='A')
{
cRear +=32;
}
}
if(front >= rear) break;
if(cFront!=cRear)
{
return false;
}
}
return true;
}
};