最長有效括號(困難)
2020年7月4日
題目來源:力扣
解題
第一次做困難題,看了官方題解,理解了很久才明白
這道題,關鍵是狀態轉移方程的推理,以及dp[-1]的異常處理,官方題解講得很明白。可以優化的是在一些重複的運算上,比如s的長度,s轉成字符數組等。
public class Solution {
public int longestValidParentheses(String s) {
int maxans = 0;
int slen=s.length();
int dp[] = new int[slen];
for (int i = 1; i < slen; 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;
}
}