评论区,大佬的简洁思路:
代码:
class Solution {
public:
int longestValidParentheses(string s) {
int ans=0;
vector<int> dp(s.size(),0);
for(int i=1;i<s.size();i++){//dp[i-1]存放的是 以i结尾 长为n的有效括子串
if(s[i]==')'){
int j = i-dp[i-1]-1;//之前没匹配过的)的位置
if(j>=0 && s[j]=='(')
dp[i] = (i-j+1) + (j-1>=0 ? dp[j-1]:0);//有效的括号子串 = 现匹配的 + 前面的(有效)
}
ans=max(dp[i],ans);
}
return ans;
}
};