首页 > 代码库 > leetcode 125

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                     else27                     {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                 else40                 {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             else53             {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 };

 

leetcode 125