题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-valid-parentheses
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
动态规划解法:
class Solution {
public int longestValidParentheses(String s) {
if (s.length() <= 1)
return 0;
int ans = 0;
int[] dp = new int[s.length()];
for (int i = 1; i < dp.length; i++) {
if (s.charAt(i) == ')'){
if (s.charAt(i-1) == '('){
dp[i] = i-2 > -1 ? dp[i - 2] + 2 : 2;
}else if (s.charAt(i - 1) == ')'){
int leftLen = dp[i - 1];
if (i - leftLen - 1 > -1 && s.charAt(i - leftLen - 1) == '(') {
if (i - leftLen - 1 == 0) {
dp[i] = dp[i - 1] + 2;
} else {
dp[i] = dp[i - leftLen - 2] + dp[i - 1] + 2;
}
}
}
}
ans = Math.max(ans,dp[i]);
}
return ans;
}
}
网友评论