LeetCode 32. Longest Valid Parentheses

很容易想到‘)'的数量超过了前面的'(',那么直接非法了

但多余的'('如何处理呢?我们用第二个倒序的栈,那么'('相当于')',可以跟之前一样的方法处理掉啦

很明显o(n)解决嘛

class Solution {
public:
    int getx(char a)
    {
        if(a=='(')
            return 1;
        else
            return -1;
    }
    int longestValidParentheses(string s) {
        stack<char> p;
        int sump=0,x,sumq,sum;
        int len=s.length();
        int ans=0;
        for(int i=0;i<len;i++)
        {
            x=getx(s[i]);
            sump+=x;
            if(sump<0)
            {
                sumq=0;sum=0;
                while(!p.empty())
                {
                    char b=p.top();
                    int y=-getx(b);
                    sumq+=y;
                    sum++;
                    if(sumq<0)
                    {
                        sumq=0;
                        sum=0;
                    }
                    if(sum>ans)
                         ans=sum;
                    p.pop();
                }
                sump=0;
            }
            else
                p.push(s[i]);
                
        }
        sumq=0;sum=0;
        while(!p.empty())
        {
            char b=p.top();
            int y=-getx(b);
            sumq+=y;
            sum++;
            if(sumq<0)
                sum=sumq=0;
            if(sum>ans)
                ans=sum;
            p.pop();
        }
        return ans;
    }
};

 以前打acm的时候没有养成眼debug的习惯,在编译器上调啊调。现在面试网页上的编译器不好调,感觉有点血崩。。习惯必须养好啊

posted on 2017-03-24 10:28  此剑之势愈斩愈烈  阅读(73)  评论(0编辑  收藏  举报

导航