给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3:
输入:s = ""
输出:0
提示:
0 <= s.length <= 3 * 104
s[i] 为 '(' 或 ')'
class Solution {
public:
int longestValidParentheses(string s) {
if(s.empty()||s.size()==1) return 0;
int n=s.size();
vector<int> dp(n,0);
int res = 0;
for(int i=1;i<n;i++){
if(s[i]==')'){
int pre = i-dp[i-1]-1;
if(s[i-1]=='('){
dp[i] = 2 + ((i-2) >= 0 ? dp[i-2] : 0);
}else if(s[i-1]==')'){
if(dp[i-1]>0){
if((i-dp[i-1]-1)>=0 && s[i-dp[i-1]-1]=='('){
dp[i]=2+dp[i-1]+((i-dp[i-1]-2)>=0?dp[i-dp[i-1]-2]:0);
}
}
}
}
res=max(res,dp[i]);
}
return res;
}
};