Leetcode演算法Java全解答--32. 最長有效括號
阿新 • • 發佈:2018-12-01
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