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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章