题目:
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.
思路:
这是一道名副其实的水题。然而如果了解了STL中的库函数之后,会让你写起来更得心应手。这里总结几个STL中的相关函数吧:
int isdigit(int c): check if a character is decimal digit. Decimal digits are any of: 0 1 2 3 4 5 6 7 8 9
int isalpha(int c): check if a character is alphabetic. Checks whether c is an alphabetic letter, either uppercase or lowercase.
int isalnum(int c): check if a character is alphanumeric. Checks whether c is either a decimal digit or an uppercase or lowercase letter.
代码:
class Solution {
public:
bool isPalindrome(string s) {
int length = s.length();
int left = 0, right = s.size() - 1;
while (left < right) {
while (left < right && !isalnum(s[left])) {
++left;
}
while (left < right && !isalnum(s[right])) {
--right;
}
if (left < right && tolower(s[left++]) != tolower(s[right--])) {
return false;
}
}
return true;
}
};