最长有效括号(困难)
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;
}
}