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; } };
其他解法: