給你一個(gè)只包含 '(' 和 ')' 的字符串,找出最長(zhǎng)有效(格式正確且連續(xù))括號(hào)子串的長(zhǎng)度。
示例 1:
輸入:s = "(()"
輸出:2
解釋:最長(zhǎng)有效括號(hào)子串是 "()"
示例 2:
輸入:s = ")()())"
輸出:4
解釋:最長(zhǎng)有效括號(hào)子串是 "()()"
示例 3:
輸入:s = ""
輸出:0
提示:
0 <= s.length <= 3 * 104
s[i] 為 '(' 或 ')'
java代碼:
class Solution {
public int longestValidParentheses(String s) {
int maxans = 0;
int[] dp = new int[s.length()];
for (int i = 1; i < s.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 ? dp[i - dp[i - 1] - 2] : 0) + 2;
}
maxans = Math.max(maxans, dp[i]);
}
}
return maxans;
}
}