標籤:style blog color io 使用 ar for div sp
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