leetcode 32. 最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:
输入:s = ""
输出:0
提示:
0 <= s.length <= 3 * 104
s[i] 为 '(' 或 ')'
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { public int longestValidParentheses(String s) { int length = s.length(); if (length < 2) { return 0; } int[] dp = new int[length]; int max = 0; for (int i = 0; i < length; i++) { if (s.charAt(i) == '(') { dp[i] = 1; } else { int l = i - 1 >= 0 ? dp[i - 1] : 0; int ll = i - l - 1 >= 0 ? dp[i - l - 1] : 0; if (l > 1) { if (ll == 1) { dp[i] = l + 2; ll = i - l - 2 >= 0 ? dp[i - l - 2] : 0; } } else if (l == 1) { dp[i] = 2; } if (l > 0 && (ll & 1) == 0) { dp[i] += ll; } } if (dp[i] > max && dp[i] != 1) { max = dp[i]; } } return max; } }