这是一道纯粹的动态规划题目。
我之前考虑成了二维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;
}

4011

被折叠的 条评论
为什么被折叠?



