- 题目:给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例:输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
- 动态规划
public int longestValidParentheses(String s){
if (s.length() == 0)
return 0;
int[] dp = new int[s.length()];
int result = 0;
dp[0] = 0;
for (int i = 1; i < s.length(); i++){
if (s.charAt(i) == '(')
dp[i] = 0;
else {
if (s.charAt(i - 1) == '('){
dp[i] = i - 2 >= 0 ? dp[i - 2] + 2 : 2;
}else {
if (i - dp[i - 1] - 1 >= 0 && s.charAt(i - dp[i - 1] - 1) == '('){
dp[i] = i - dp[i - 1] - 2 >=0? dp[i - 1] + 2 + dp[i - dp[i - 1] - 2] : dp[i - 1] + 2;
}else
dp[i] = 0;
}
}
result = Math.max(result, dp[i]);
}
return result;
}