给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" class Solution { public int longestValidParentheses(String s) { int[] dp = new int[s.length()]; int res = 0; for(int i=1;i<dp.length;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>=0?dp[i-dp[i-1]-2]:0)+2; } res = Math.max(res,dp[i]); } } return res; } }来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
栈实现
class Solution { public int longestValidParentheses(String s) { Stack<Integer> stack = new Stack<Integer>(); int max = 0; stack.push(-1); for(int i=0;i<s.length();i++) { if(s.charAt(i)==')') { stack.pop(); if(stack.isEmpty()) { stack.push(i); }else { max = Math.max(max,i-stack.peek()); } }else { stack.push(i); } } return max; } }