LeetCode—最长有效括号(DP)

    技术2025-04-10  19

    最长有效括号(困难)

    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; } }

    Processed: 0.011, SQL: 9