[LintCode]有効文字列
5145 ワード
1 class Solution {
2 public:
3 /**
4 * @param s A string
5 * @return Whether the string is a valid palindrome
6 */
7 bool isPalindrome(string& s) {
8 // Write your code here
9 int left = 0, right = s.length() - 1;
10 while (left < right) {
11 while (left < right && !isdigit(s[left]) && !isLetter(s[left]))
12 left++;
13 if (left == right) break;
14 while (right > left && !isdigit(s[right]) && !isLetter(s[right]))
15 right--;
16 if (right == left) break;
17 if (!match(s[left++], s[right--])) return false;
18 }
19 return true;
20 }
21 private:
22 bool isLetter(char s) {
23 return (s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z');
24 }
25 bool match(char s, char t) {
26 if (isLetter(s) && isLetter(t))
27 return (s == t) || (s - t == 32) || (t - s == 32);
28 return s == t;
29 }
30 };