class Solution {
public:
int longestValidParentheses(string s) {
if(s.size()==0||s.size()==1) return 0;
//dp[i]表示以s[i]为结尾的字符串的最长有效长度
vector<int> dp(s.size());
dp[0]=0;
if(s[0]=='('&&s[1]==')') dp[1]=2;
int result=max(0,dp[1]);
for(int i=2;i<s.size();i++){
if(s[i]==')'){
if(s[i-1]=='('){
dp[i] = dp[i-2]+2;
}else{
if((i-dp[i-1]-1)>=0&&s[i-dp[i-1]-1]=='('){
dp[i] = dp[i-1] + 2 + (i-dp[i-1]-2>=0?dp[i-dp[i-1]-2]:0);
}else{
dp[i]=0;
}
}
}else{
dp[i]=0;
}
result = max(result,dp[i]);
}
return result;
}
};
备战秋招版 --- 第8题:32.最长有效括号
最新推荐文章于 2025-08-16 00:47:01 发布