leetcode - 32. 最长有效括号
题目
代码
#include <iostream>
#include <vector>
using namespace std;
int longestValidParentheses(string s) {
int res = 0;
int n = s.size();
vector<int> dp(n, 0);
for(int i = 1; i < n; i++){
if(s[i] == ')'){
if(s[i-1] == '('){
dp[i] = (i >= 2 ? dp[i-2] : 0) + 2;
}else{
if(i - dp[i-1] > 0 && s[i - dp[i-1] - 1] == '('){
dp[i] = dp[i-1] + (i - dp[i-1] - 2 >= 0 ? dp[i-dp[i-1]-2] : 0) + 2;
}
}
res = max(res, dp[i]);
}
}
return res;
}
int main(){
string s;
cin>>s;
int res;
res = longestValidParentheses(s);
cout<<res;
return 0;
}