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 string::const_iterator left = s.begin(); 7 string::const_iterator right = s.end() - 1; 8 9 while (left < right) { 10 if (!isalnum(*left)) ++left; 11 else if (!isalnum(*right)) --right; 12 else if (tolower(*left) == tolower(*right)) { 13 ++left; 14 --right; 15 } else { 16 return false; 17 } 18 } 19 return true; 20 } 21 };