[LeetCode] Valid Palindrome

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 };

 

posted @ 2014-11-04 14:53  vincently  阅读(151)  评论(0编辑  收藏  举报