栈的压入弹出序列

75 阅读1分钟

问题描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 假设压入栈的所有数字均不相等。 例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。 注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则视为是一个栈的压入、弹出序列。 数据范围 序列长度 [0,1000]。 样例 输入:[1,2,3,4,5]\n[4,5,3,2,1] 输出:true 解析 class Solution { public: bool isPopOrder(vector\u003Cint> pushV,vector\u003Cint> popV) {\n if(pushV.size()!=popV.size()) return false;\n int i=0;\n stack\u003Cint>stk;\n for(auto x: pushV){\n stk.push(x);\n while(stk.size()&&stk.top()==popV[i]){\n stk.pop();\n i++;\n }\n }\n return stk.empty();\n }\n};