leetcode 32 Longest Valid Parentheses

来源:互联网 发布:c语言数组视频 编辑:程序博客网 时间:2024/05/01 21:26
这是一道纯粹的动态规划题目。
我之前考虑成了二维dp了。
dp方程是如果前一个的括号是‘(’,那么如果j=i+1+dp[i+1]步之后的括号是‘)’那么dp[i]=dp[i+1]+2;
同时别忘了考虑到并列的这种情形,所以要加上dp[i]+=dp[j+1];
代码如下:
 int longestValidParentheses(string s) {        int len = s.length();        int *dp  = new int[len];        if(len<2)return 0;        int max = 0;        for(int k = 0;k<len;k++)        dp[k] = 0;        for(int i = len-2;i>=0;i--)        {            if(s[i]=='(')             {   int j = i+1+dp[i+1];                 if(j<len&&s[j]==')'){                  dp[i] = dp[i+1]+2;                  if(j+1<len)dp[i]+=dp[j+1];                 }                if(max<dp[i])max = dp[i];             }                            }                return max;    }

0 0
原创粉丝点击