LeetCode—最长有效括号(DP)

最长有效括号(困难)

2020年7月4日

题目来源:力扣

在这里插入图片描述

解题

第一次做困难题,看了官方题解,理解了很久才明白

这道题,关键是状态转移方程的推理,以及dp[-1]的异常处理,官方题解讲得很明白。可以优化的是在一些重复的运算上,比如s的长度,s转成字符数组等。

public class Solution {
    public int longestValidParentheses(String s) {
        int maxans = 0;
        int slen=s.length();
        int dp[] = new int[slen];
        for (int i = 1; i < slen; i++) {
            if (s.charAt(i) == ')') {
                if (s.charAt(i - 1) == '(') {
                    dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;
                } else if (i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '(') {
                    dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2;
                }
                maxans = Math.max(maxans, dp[i]);
            }
        }
        return maxans;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/107121806
今日推荐