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.
思路:最一般的遍历+比较。注意题目要求和字母大小写问题。
时间复杂度O(n),空间复杂度O(1)
1 class Solution { 2 public: 3 bool isPalindrome(string s) { 4 if (s.empty()) return true; 5 6 vector<char> cvec; 7 for (string::size_type i = 0, j = s.size() - 1; i < j;) { 8 if (!isalnum(s[i])) { 9 ++i; 10 continue; 11 } 12 if (!isalnum(s[j])) { 13 --j; 14 continue; 15 } 16 if (isdigit(s[i]) && s[i] != s[j]) { 17 return false; 18 } 19 if (isalpha(s[i]) && (toupper(s[i]) != toupper(s[j]))) { 20 return false; 21 } 22 ++i; 23 --j; 24 } 25 26 27 return true; 28 } 29 };