32.最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
动态规划
- 使用动态规划的方法
- dp[ i ]保存以 i 结尾的最长有效括号长度
class Solution {
public:
int longestValidParentheses(string s) {
if(s.size()<2) return 0;
int res=0;
vector<int> dp(s.size(),0);
for(int i=1;i<s.size();i++){
if(s[i] == ')'){
int j=i-1-dp[i-1];
if(j<0) continue;//如果j小于0代表不会存在(与之匹配,则继续循环。
if(s[j]=='('){
int tmp=0;
if(j>0){//要注意 j 范围
tmp=dp[j-1];
}
dp[i]=2+dp[i-1]+tmp;
}
}
if(dp[i] > res){
res = dp[i];
}
}
return res;
}
};
通过时间: