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.

分析:题意为 给出一个字符串,检查它是不是一个回文的情况。判断时只考虑字母数字的字符并且忽略大小写。

注意点 1、考虑字符串为空的情况,并将其作为回文的

          2、忽略大小写的差别,比较之前先将大小写转换为一致的

          3、非字母数字字符要跳过,将它滤除,得到有效字符串

          4、对有效字符串前后相应位置进行比较判断

代码如下:

class Solution {  
public:  
    bool isStr(char &ch){  
        if(ch >= '0' && ch <= '9'){  
            return true;  
        } else if(ch >= 'a' && ch <= 'z'){  
            return true;  
        } else if(ch >= 'A' && ch <= 'Z'){  
           ch += 32;  
           return true;  
        }   
          
        return false;  
    }  
      
    bool isPalindrome(string s) {  
        // Start typing your C/C++ solution below  
        // DO NOT write int main() function  
        int len = s.length();  
        if(len == 0){  
            return true;  
        }  
          
        string str = "";  
        for(int i = 0; i < len; i++){   // remove illegal char, such as "?" "/" ...  
            if(isStr(s[i])){  
                str += s[i];  
            }  
        }  
          
        len = str.length();  
        int mid = (len + 1) / 2;  
        for(int i = 0; i < mid; i++){  
            if(str[i] != str[len - 1 - i]){     // check front and end char  
                return false;  
            }  
        }  
        return true;  
    }  
}; 

其他解法:  

原文地址:https://www.cnblogs.com/carsonzhu/p/4690854.html