思路:前后两个指针。又一次bug free!
(但是速度慢。待我想想有什么更好解法么?或者是 判断可以优化?
果真!判断isCharEqual(c1,c2)时,可以优化。不需要判断c1到底是大写还是小写)如下面。
bool isCharEqual(char c1, char c2){ if(c1==c2 || (c1+'a'-'A')==c2 || (c1+'A'-'a')==c2) return true; else return false; }
解法
class Solution { public: bool isAlphanumeric(char c){ if(('A'<=c && c<='Z') || ('a'<=c && c<='z')||('0'<=c && c<='9')) return true; else return false; } bool isCharEqual(char c1, char c2){ if(c1==c2 || (c1+'a'-'A')==c2 || (c1+'A'-'a')==c2) return true; else return false; } bool isPalindrome(string s) { //check validation if(s.empty()) return true; //check special case or bound size_t len=s.size(); if(len==1) return true; //general case int i,j; bool res=true; for(i=0,j=len-1;i<=j;){ if(!isAlphanumeric(s[i])) i++; else if(!isAlphanumeric(s[j])) j--; else if(isCharEqual(s[i],s[j])){i++;j--;} else {res=false;break;} } return res; } };