leetcode-Longest Valid Parentheses

来源:互联网 发布:网络投诉电话 编辑:程序博客网 时间:2024/05/16 12:01

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

class Solution {public:    int longestValidParentheses(string s) {        int n = 0;        int ret = 0;        int i = 0;        vector<int> a;        vector<int> b;        while(s[i])        {            int m = a.size();            if(n == 0)            {                if(s[i] =='(')                {                    a.push_back(1);                    b.push_back(0);                    n++;                }                else if(s[i] == ')')                {                    a.push_back(-1);                    b.push_back(0);                }            }            else if(n > 0)            {                if(s[i] == '(')                {                    if(s[i-1] == ')')                    {                        a.push_back(1);                        b.push_back(0);                        n++;                    }                    else if(s[i-1] == '(')                    {                        n++;                        a[m-1]++;                    }                }                else if(s[i] == ')')                {                    while(a[m-1] == 0)m--;                    a[m-1]--;                    b[m-1]++;                    n--;                }            }            i++;        }        i = 0;        int m = a.size();        while(i < m-1)        {            int count = b[i];            while ((i < m-1)&&(a[i+1] == 0))            {                count += b[++i];            }            if(count > ret)ret = count;            i++;        }        if((m > 0)&&(b[m-1] > ret))ret = b[m-1];        return ret*2;    }};


0 0