32. 最长有效括号
思路:这种计算数量的问题都可以想到动态规划。f[i]里记录的是以s[i]结尾的子串的最大长度。然后开始推理。
大佬的思路,非常推荐
class Solution {
public:
int f[30010];
int longestValidParentheses(string s) {
int lens=s.size();
f[0]=0;
int maxx=0;
for(int i=1;i<lens;i++){
if(s[i]=='('){
f[i]=0;
}else{
if(s[i-1]=='('){
int tmp=0;
if(i-2>=0) tmp=f[i-2]; //避免越界
f[i]=tmp+2;
}else{
if(i-1-f[i-1]>=0&&s[i-1-f[i-1]]=='('){
int tmp=0;
if(i-2-f[i-1]>=0) tmp=f[i-2-f[i-1]]; //避免越界
f[i]=f[i-1]+2+tmp;
}
}
}
maxx=max(maxx,f[i]);
}
return maxx;
}
};