题目: 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.
思路分析: 将字符串中的非数字字母字符跳过,大写全部转小写,然后从字符串两头向中间逼近,逐一进行比较。
C++参考示例:
class Solution
{
private:
bool isAlphanumeric(char &ch)
{
if (ch >= 'A' && ch <= 'Z')
{
ch += 32;
return true;
}
if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
{
return true;
}
return false;
}
public:
bool isPalindrome(string s)
{
size_t length = s.length();
if (length <= 1)
{
return true;
}
size_t i = 0;
size_t j = length - 1;
while (i < j)
{
if (!isAlphanumeric(s[i]))
{
i++;
continue;
}
if (!isAlphanumeric(s[j]))
{
j--;
continue;
}
if (s[i] != s[j])
{
return false;
}
i++;
j--;
}
return true;
}
};
晒账截图!突然发现原来C#要比Java快这么多!