1.栈操作
class Solution {
public:
int longestValidParentheses(string s) {
int len=s.size(),maxx=0;
stack<int>bag;bag.push(-1);
for(int i=0;i<len;i++)
{
if(bag.top()==-1||s[i]=='('||(s[i]==')'&&s[bag.top()]!='('))bag.push(i);
else bag.pop();
}
//len++ ;
while(!bag.empty())
{
int s=bag.top();bag.pop();//cout<<s<<endl;
maxx=max(maxx,len-s-1);
len=s;
}
return maxx;
}
};
2.动态规划
1.if(dp[i-1]’(’&&dp[i]’)’)dp[i]=dp[i-2]+2;注意i-2>=0;
2.else if(dp[i-dp[i-1]-1)]’(’&&dp[i]’)’)dp[i]=dp[i-1]+2+dp[i-dp[i-1]-2];注意同上
3.else dp[i]=0;
class Solution {
public:
int longestValidParentheses(string s) {
int len=s.size(),maxx=0;
int dp[len+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<len;i++)
{
if(s[i]=='(')dp[i]=0;
else if(s[i]==')'&&s[i-1]=='(')if(i-2>=0)dp[i]=dp[i-2]+2;else dp[i]=2;
else if((i-dp[i-1]-1>=0)&&s[i-dp[i-1]-1]=='('){dp[i]=dp[i-1]+2;if(i-dp[i-1]-2>=0)dp[i]+=dp[i-dp[i-1]-2];}
else dp[i]=0;
maxx=max(maxx,dp[i]);
}
// cout<<len<<endl;
//for(int i=0;i<len;i++)
// cout<<dp[i]<<' ';
return maxx;
}
};