【LeetCode】125. 验证回文串 [C++]

class Solution {
public:
    bool isPalindrome(string s) {
        int l=0,r=s.size()-1;
        int p='a'-'A';
        int flag=1;
        while(l<=r)
        {
            while(1)
            {
                if(s[l]>='A'&&s[l]<='Z')
                {
                    s[l]+=p;
                    break;
                }
                
                if(!(s[l]>='a'&&s[l]<='z'||s[l]>='0'&&s[l]<='9')&&l<r){
                    ++l;
                }
                else break;
            }

            if(l<r)
            while(1){
                if(s[r]>='A'&&s[r]<='Z'){
                    s[r]+=p;
                    break;
                }
                if(!(s[r]>='a'&&s[r]<='z'||s[r]>='0'&&s[r]<='9')&&l<r){
                    --r;
                }
                else break;
            }
            
            if(l==r&&!(s[r]>='a'&&s[l]<='z'||s[l]>='0'&&s[l]<='9')&&!(s[r]>='a'&&s[r]<='z'||s[r]>='0'&&s[r]<='9'))
            {
                break;
            }
            if(s[l]!=s[r])
            {
                flag=0;
                break;
            }
            --r;
            ++l;
        }
        return flag;
    }
};

O(n)做法,左右双直至,过滤大写字母和符号,只判断小写字母,当有不一样的时候则返回不符合。

posted @ 2022-02-05 21:00  Jerry2km1  阅读(47)  评论(0)    收藏  举报