32. Longest Valid Parentheses
传送门
dp思路:
问题->最长有效括号子序列长度
状态->dp[i]以i为结尾的最长有效括号子序列长度(则str[i]= ‘)’ );
子状态:
如果str[i-1]= ‘(’ ---->dp[i-2]
如果str[i-1]= ‘)’ ---->如果str[i-dp[i-1]-1]= ‘(’ ---->dp[i-dp[i-1]-2]+dp[i-1]
class Solution {
public:
int longestValidParentheses(string s) {
int len=s.size();
int dp[len+10];
int ans=-1;
for(int i=1;i<len;i++){
if(s[i]==')'){
if(s[i-1]=='('){
if(i>=2) dp[i]=dp[i-2]+2;
else dp[i]=2;
}
else{
if(i-dp[i-1]>0&&s[i-dp[i-1]-1]=='('){
if(i-dp[i-1]>=2)
dp[i]=dp[i-1]+dp[i-dp[i-1]-2]+2;
else
dp[i]=dp[i-1]+2;
}
}
}
ans=max(ans,dp[i]);
}
return ans;
}
};