首页 > 代码库 > Longest Valid Parentheses

Longest Valid Parentheses

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.

思路:使用vector模拟栈,栈顶元素表示出现在当前‘(’之后的合法匹配数,栈本身具有一个哨位节点。依次遍历s,若当前字符s[i]==‘(‘,则将0入栈;否则,将栈顶元素加2后再加到次栈顶元素,同时栈顶元素出栈。

 1 class Solution { 2 public: 3     int longestValidParentheses( string s ) { 4         int slen = s.length(), idx = 0, ret = 0; 5         if( slen <= 1 ) { return 0; } 6         vector<int> cntVec( slen+1, 0 ); 7         for( int i = 0; i < slen; ++i ) { 8             if( s[i] == ( ) { 9                 cntVec[++idx] = 0;10             } else {11                 if( idx > 0 ) {12                     cntVec[idx-1] += cntVec[idx]+2;13                     ret = max( ret, cntVec[--idx] );14                 } else {15                     cntVec[0] = 0;16                 }17             }18         }19         return ret;20     }21 };

 

Longest Valid Parentheses