您的位置:首页 > 其它

LeetCode 32. Longest Valid Parentheses

2017-03-24 10:28 441 查看
很容易想到‘)'的数量超过了前面的'(',那么直接非法了

但多余的'('如何处理呢?我们用第二个倒序的栈,那么'('相当于')',可以跟之前一样的方法处理掉啦

很明显o(n)解决嘛

class Solution {
public:
int getx(char a)
{
if(a=='(')
return 1;
else
return -1;
}
int longestValidParentheses(string s) {
stack<char> p;
int sump=0,x,sumq,sum;
int len=s.length();
int ans=0;
for(int i=0;i<len;i++)
{
x=getx(s[i]);
sump+=x;
if(sump<0)
{
sumq=0;sum=0;
while(!p.empty())
{
char b=p.top();
int y=-getx(b);
sumq+=y;
sum++;
if(sumq<0)
{
sumq=0;
sum=0;
}
if(sum>ans)
ans=sum;
p.pop();
}
sump=0;
}
else
p.push(s[i]);

}
sumq=0;sum=0;
while(!p.empty())
{
char b=p.top();
int y=-getx(b);
sumq+=y;
sum++;
if(sumq<0)
sum=sumq=0;
if(sum>ans)
ans=sum;
p.pop();
}
return ans;
}
};


以前打acm的时候没有养成眼debug的习惯,在编译器上调啊调。现在面试网页上的编译器不好调,感觉有点血崩。。习惯必须养好啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: