码迷,mamicode.com
首页 > 其他好文 > 详细

Longest Valid Parentheses

时间:2014-09-03 22:30:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签: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

标签:style   blog   color   io   使用   ar   for   div   sp   

原文地址:http://www.cnblogs.com/moderate-fish/p/3954436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!