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.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool isValid(char c){
if(c >= 'a' && c <= 'z') return true;
if(c >= '0' && c <= '9') return true;
return false;
}
bool isPalindrome(string s) {
if (s.empty())
return true;
transform(s.begin(), s.end(), s.begin(), ::tolower);
int first = 0;
int last = s.size()-1;
while (first<=last)
{
while (!isValid(s[first])){
++first;
if (first>=last)
return true;
}
while (!isValid(s[last])){
--last;
if (first>=last)
return true;
}
if (s[first]==s[last]){
++first;
--last;
}
else
return false;
}
return true;
}