给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
class Solution { public int longestValidParentheses(String s) { if(s == null || s.length() < 2) return 0; int[] dp = new int[s.length()]; dp[0] = 0; int max = 0; for(int i = 1;i < s.length();i++){ //以i结尾的长度 if(s.charAt(i) == ')'){ if(i - 1 >= 0 && s.charAt(i - 1) == '('){ dp[i] = (i > 2 ? dp[i - 2] : 0) + 2; }else if( i - 1 - dp[i - 1] >= 0 && s.charAt(i - 1 - dp[i - 1]) == '('){ dp[i] = (i - 2 - dp[i - 1] >= 0 ? dp[i - 2 - dp[i - 1]] : 0) + dp[i - 1] + 2; } max = Math.max(max,dp[i]); } } return max; } }