[leetcode刷题系列]Valid Palindrome

模拟, 也许算是所谓的two pointers

class Solution {
    bool isok(char c){
        return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'; 
    }
    char getLow(char c){
        if(c >= 'A' && c <= 'Z')
            return c - 'A' + 'a';
        return c;
    }
public:
    bool isPalindrome(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int left = 0, right = s.size() - 1;
        while(left < right){
            while(left < right)
                if(!isok(s[left])) ++ left; else break;
            if(left >= right)
                return true;
            while(left < right)
                if(!isok(s[right])) -- right; else break;
            if(right <= left)
                return true;
            char leftc = getLow(s[left]);
            char rightc = getLow(s[right]);
            if(leftc != rightc)
                return false;
            ++ left;
            -- right;
        }
        return true;
    }
};


你可能感兴趣的:([leetcode刷题系列]Valid Palindrome)