Given a string, determine if it is a palindrome,
considering only alphanumeric characters and ignoring cases.
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.
For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.
Idea: Palindrome, means the characters are symmetric about a characters.
we could use the start pointer and end pointer to check whether they are equal.
//O(n) time, O(1)space
class Solution {
public:
bool isPalindrome(string s) {
int size = s.size();
if(size == 0) return true;
int start = 0;
int end = size - 1;
while(start < end)
{
if(!isAlphanum(s[start]))
{
start++;
continue;
}
if(!isAlphanum(s[end]))
{
end--;
continue;
}
if(!isSame(s[start], s[end]))
{
return false;
}
else
{
start++;
end--;
}
}
return true;
}
private:
bool isAlphanum(char ch)
{
if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9')
return true;
else
return false;
}
private:
bool isSame(char a, char b)
{
if(a == b || a == b + 32 || a == b - 32)
return true;
else
return false;
}
};