1. 程式人生 > >Leetcode演算法Java全解答--32. 最長有效括號

Leetcode演算法Java全解答--32. 最長有效括號

Leetcode演算法Java全解答–32. 最長有效括號

文章目錄

題目

給定一個只包含 ‘(’ 和 ‘)’ 的字串,找出最長的包含有效括號的子串的長度。

示例 1:

輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為 "()"
示例 2:

輸入: ")()())"
輸出: 4
解釋: 最長有效括號子串為 "()()"

想法

需用到輔助陣列d[s.length()],表示從當前字元開始,到字串結尾的最長有效括號子串長度(當前字元需為有效括號子串的第一個字元)

解題思路:從字串結尾往前處理,求輔助陣列d[]

當前字元下標為index,

若當前字元為左括號’(’,判斷index+1+d[index+1]位置的字元是否為右括號’)’,

若為右括號,則d[index] = d[index+1]+2,

並且判斷index+1+d[index+1]+1位置的元素是否存在,若存在,

則d[index] += d[index+1+d[index+1]+1](解決上述兩個有效括號子串直接相鄰的情況)

結果

// TODO

總結

// TODO

程式碼

我的答案

class Solution {
    public int longestValidParentheses(String s) {
        if(null == s) return 0;
 
        int len = s.length(), max = 0;
        int[] d = new int[len];
 
        for(int index = len-2; index >= 0; index--){
            int symIndex = index+1+d[index+1];
            if('(' == s.charAt(index) && symIndex < len && ')' == s.charAt(symIndex)){
                d[index] = d[index+1]+2;
                if(symIndex+1 < len){
                    d[index] += d[symIndex+1];
                }
            }
 
            max = Math.max(max, d[index]);
        }
        return max;
    }
}

大佬們的答案

測試用例


其他

程式碼託管碼雲地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git

檢視其他內容可以點選專欄或者我的部落格哈:https://blog.csdn.net/cmqwan

“大佬們的答案” 標籤來自leetcode,侵權請聯絡我進行刪改

如有疑問請聯絡,聯絡方式:QQ3060507060