LeetCode 32 最长有效括号

题目给的是一个只含有(和)的字符串,问最长的包含有效括号的字串长度,也就是这个字串要满足所有括号匹配。这道题的标签给的有动态规划,但是似乎并没有用上,我的思路是设一个数组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;
    }
};
原文地址:https://www.cnblogs.com/ambition-hhn/p/12959663.html