要点
- 一维动态规划, 没有想到
- dp的含义是包含当前位置的有效长度
- 思路比较难, 区分成两种情况考虑, 一般想不到.
- 比较考验数组下标操作以及越界检查
参考链接
题目解答参考链接
代码
class Solution {
public:
int longestValidParentheses(string s) {
int n = s.length();
vector<int> dp(n, 0);
int result = 0;
for (int i = 1; i < n; i++) {
if (s[i] == ')') {
if (s[i - 1] == '(') {
int tmpIndex = i - 2;
dp[i] = (tmpIndex >= 0 ? dp[tmpIndex]: 0) + 2;
result = max(result, dp[i]);
} else if (s[i - 1] == ')') {
int tmpIndex = i - 1 - dp[i-1];
if (tmpIndex >= 0 && s[tmpIndex] == '(') {
dp[i] = (tmpIndex - 1 >= 0 ? dp[tmpIndex - 1] : 0) + dp[i-1] + 2;
result = max(result, dp[i]);
}
}
}
}
return result;
}
};