Longest Valid Parentheses

来源:互联网 发布:免费内部通讯软件 编辑:程序博客网 时间:2024/06/03 14:45

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 max = 0;      int ii = 0;      while(ii < s.length()) {         int jj = ii;         int count = 0;         int mark = 0;         vector<int> flags;         while(jj < s.length()) {            if(s[jj] == '(') {               flags.push_back(jj);               count ++;            }            else if(count > 0) {               count --;               flags.pop_back();               mark +=2;            }            else {               jj ++;               break;            }              jj ++;         }         if (!flags.empty())         {            mark = flags[0] - ii;            for (int kk = 0; kk < flags.size() - 1; kk ++)            {               int newmark = flags[kk + 1] - flags[kk] - 1;               if(newmark > mark)                  mark = newmark;            }            ii = flags[flags.size() - 1] + 1;         }         else {            ii = jj;         }         if(mark > max) {            max = mark;         }               }      return max;   }};





0 0