Leetcode 32 Longest Valid Parentheses
class Solution{
public:
int longestValidParentheses(string s) {
int n = s.length(), result = 0;
vector<int> dp(n+1);
for(int i = 1;i < n; ++i){
if(s[i] == ')'){
if(s[i-1] == '('){
dp[i+1] = dp[i-1] + 2;
} else {
if(s[i - dp[i] -1] == '(')
dp[i+1] = dp[i] + dp[i-dp[i]-1] + 2;
}
result = max(result,dp[i+1]);
}
}
return result;
}
};