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.\
题意:给定一个字符串,确定它是否是回文,只考虑字母数字字符;
思路:从头遍历和从尾部遍历同时进行;
跳过不是字符的;
注意题意,忽略大小写,即a==A
class Solution
{
public:
bool isPalindrome(string s)
{
if (s.empty())
{
return true;
}
int start = 0;
int end = s.size() - 1;
while (start<end)
{
//忽略非字符和非数字的
while (!((s[start] >= 'a' && s[start] <= 'z')
|| (s[start] >= 'A' && s[start] <= 'Z')
|| (s[start] >= '0' && s[start] <= '9'))
&& start<s.size())
{
start++;
}
while (!((s[end] >= 'a' && s[end] <= 'z')
|| (s[end] >= 'A' && s[end] <= 'Z')
|| (s[end] >= '0' && s[end] <= '9'))
&& end >= 0)
{
end--;
}
if (s[start] == s[end] || s[start] + 32 == s[end] || s[start] - 32 == s[end])
{
start++;
end--;
}
else
{
return false;
}
}
return true;
}
};