int max = 0; 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; } elseif (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; } max = Math.max(max, dp[i]); } } print(dp);
return max; }
privatestaticvoidprint(int[] dp){ for (int i : dp) { System.out.print(i); } System.out.println(); }
publicstaticvoidmain(String[] args){
String s = "(()"; System.out.println(longestValidParentheses(s)); s = ")()())"; System.out.println(longestValidParentheses(s)); s = ""; System.out.println(longestValidParentheses(s)); } }