leetcode32
最长有效括号
来源:Leetcode
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
code
dp问题:匹配到’)‘时,包括这个’)'的长度可能为:
1.dp[i-1]+2 (类似于")(())")
2.dp[i-1]+dp[t-1]+2(类似于"()(())",需要考虑前面已经有有效的括号)
class Solution {
public:
int longestValidParentheses(string s) {
vector<int> dp(s.size(),0);
int max_s=0;
for(int i=1;i<s.size();i++){
if(s[i]==')'){
int t=i-dp[i-1]-1;
if(t>=0&&s[t]=='('){
if(t>=1){
dp[i]=dp[t-1]+dp[i-1]+2;
}
else{
dp[i]=dp[i-1]+2;
}
max_s=max(dp[i],max_s);
}
}
}
return max_s;
}
};