题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
刚开始代码写的很不简洁,超时了,举例子也都能过,如下:
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { stack<int> s; if(pushV.size()!=popV.size()) return false; if(pushV.size()==0||popV.size()==0) return true; int j=0; for(int i=0;i<popV.size();i++){ if(s.top()==popV[i]){ s.pop(); j++; continue; } for(;j<pushV.size();j++){ s.push(pushV[j]); if(pushV[j]==popV[i]) break; } if(s.top()==popV[i]){ s.pop(); j++; continue; } if(j==pushV.size()&&i!=popV.size()) return false; } return true; } };
后来参考题解,发现可以简化很多,使用while也很省力
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { stack<int> s; int i=0,j=0; while(i<pushV.size()){ if(pushV[i]!=popV[j]) s.push(pushV[i++]); else{ i++;j++; while(!s.empty()&&s.top()==popV[j]){ s.pop(); j++; } } } return s.empty(); } };