题目给的是一个只含有(和)的字符串,问最长的包含有效括号的字串长度,也就是这个字串要满足所有括号匹配。这道题的标签给的有动态规划,但是似乎并没有用上,我的思路是设一个数组dp,dp[i]表示以i结尾的字符串有多少个连续的有效括号对,更新公式是如果以i-1结尾的匹配上的字符串的前一个字符是'(',且当前字符是')',那么就匹配上了,dp[i]=dp[i-1]+1,然后再去检测当前字符串是否可以和之前的字符串连上,如果连上就加上之前的dp的值,具体可见代码。
class Solution {
public:
int longestValidParentheses(string s) {
int dp[15005]={0};
int len=s.length(),ans=0,now,pos;
for(int i=1;i<len;i++)
if(s[i]==')')
{
now = dp[i-1];
pos = i-now*2-1;
if(pos>=0&&s[pos]=='(')
{
dp[i]=now+1;
}
pos = i-dp[i]*2;
if(pos>=0&&dp[pos]>=0)
{
dp[i]+=dp[pos];
}
ans=max(dp[i],ans);
}
return ans*2;
}
};