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.
Idea: Use a vector to simulate the stack. The top element of the stack indicates the number of valid matches that appear after '(', and the stack itself has a whistle node. Traverse s in sequence. If the current character s [I] = '(', 0 is entered into the stack; otherwise, add 2 to the top element of the stack and then add it to the top element of the next stack, at the same time, the top element of the stack goes out of the stack.
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