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.
//#125 Valid Palindrome
//24ms 6.04%
#include <iostream>
#include <string>
using namespace std;
class Solution
{
public:
bool isPalindrome(string s)
{
bool valid(true);
string::iterator it = s.begin();
string::reverse_iterator r_it = s.rbegin();
while(it != s.end() && r_it != s.rend())
{
while((*it < 48) || (*it < 65 && *it > 57) || *it > 122 || (*it < 97 && *it > 90))
{
//cout << *it << endl;
it++;
if(it == s.end())
{
break;
}
}
while((*r_it < 48) || (*r_it < 65 && *r_it > 57)|| *r_it > 122 || (*r_it < 97 && *r_it > 90))
{
//cout << *r_it << endl;
r_it++;
if(r_it == s.rend())
{
break;
}
}
if(it == s.end() && r_it == s.rend())
{
cout << "Reaching the ends\n";
break;
}
else if(*it == *r_it || *it == *r_it + 32 || *it == *r_it - 32)
{
//cout << "-OK-";
it ++;
r_it ++;
}
else
{
cout << "it " << *it << ", r_it "<< *r_it << endl;
cout << "Different\n";
valid = false;
break;
}
}
return valid;
}
};