首页 > 其他 > 详细

【leetcode】Longest Valid Parentheses

时间:2015-01-03 22:18:31      阅读:322      评论:0      收藏:0      [点我收藏+]

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.

 
设dp[i]表示从s[i]开始(包括s[i]),到达s[n-1]时,最长的有效括号对的长度。
 
如果s[i]==‘(‘
我们需要检查j=dp[i+1]+i+1对应的s[j]位置的括号是否为")",如果s[j]为‘)‘则说明又组成了一对括号
故此时dp[i]=dp[i+1]+2
于此同时,我们还需要继续考虑dp[j+1]的值,如果j+1没有超出范围,则dp[i]=dp[i+1]+2+dp[j+1]
 
其他情况dp[i]=0;
 
 1 class Solution {
 2 public:
 3     int longestValidParentheses(string s) {
 4         int n=s.length();
 5         if(n==0) return 0;
 6        
 7         int *dp=new int[n];
 8         dp[n-1]=0;
 9        
10         int result=0;
11         for(int i=n-2;i>=0;i--)
12         {
13             if(s[i]==()
14             {
15                 int j=dp[i+1]+i+1;
16                
17                 if(s[j]==))
18                 {
19                     dp[i]=dp[i+1]+2;
20                     if(j<n-1) dp[i]+=dp[j+1];
21                 }
22                 else
23                 {
24                     dp[i]=0;
25                 }
26                
27                 if(dp[i]>result)
28                 {
29                     result=dp[i];
30                 }
31             }
32             else
33             {
34                 dp[i]=0;
35             }
36         }
37         delete [] dp;
38         return result;
39     }
40 };

 

【leetcode】Longest Valid Parentheses

原文:http://www.cnblogs.com/reachteam/p/4199945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!