leetcode 125

125. 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.

判断字符串是否为回文字符串,只需考虑字符串中的数字和字母。

思路:字符串首尾各一个指针,进行比较;

   指针移动规则:若相等则首指针向前移动一位,尾指针向后移动以为;若出现非法字符则首尾指针相应的移动一位。

代码如下:

 1 class Solution {
 2 public:
 3     bool isPalindrome(string s) {
 4         int n = s.size(); 
 5         int st = 0; 
 6         if(n == 0)
 7         {
 8             return true;
 9         }
10         n--;
11         while(st < n)
12         {
13             if(isValid(s[st]) && isValid(s[n]))
14             {
15                 if(s[st] <= 57 && s[st] >= 48)
16                 {
17                     if(s[n] > 57 || s[n] < 48)
18                     {
19                         
20                         return false;
21                     }
22                     else if(s[st] != s[n])
23                     {
24                         return false;
25                     }
26                     else
27                     {
28                         st++;
29                         n--;
30                         continue;
31                     }
32                 }
33                 if(s[st] == s[n] || s[st]-s[n] == 32 || s[n]-s[st] == 32)
34                 {
35                     st++;
36                     n--;
37                     continue;
38                 }
39                 else
40                 {
41                     return false;
42                 }
43             }
44             else if(isValid(s[st]))
45             {
46                 n--;
47             }
48             else if(isValid(s[n]))
49             {
50                 st++;
51             }
52             else
53             {
54                 n--;
55                 st++;
56             }
57         }
58         return true;
59     }
60     bool isValid(char s)
61     {
62         if(s < 48 || s > 122)
63         {
64             return false;
65         }
66         else if(s > 57 && s < 65)
67         {
68             return false;
69         }
70         else if(s > 90 && s < 97)
71         {
72             return false;
73         }
74         return true;
75     }
76 };

 

posted @ 2016-10-01 16:49  花椰菜菜菜菜  阅读(234)  评论(0编辑  收藏  举报