很容易想到‘)'的数量超过了前面的'(',那么直接非法了
但多余的'('如何处理呢?我们用第二个倒序的栈,那么'('相当于')',可以跟之前一样的方法处理掉啦
很明显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的习惯,在编译器上调啊调。现在面试网页上的编译器不好调,感觉有点血崩。。习惯必须养好啊