题目
输入两个序列,一个是栈的压栈序列,一个是栈的出栈序列,假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路
根据压栈序列将数字压入栈,如果遇到数字和出栈序列相同,就弹出。
等所有的数字都进栈后,继续遍历出栈序列,如果栈顶和出栈数字相同就出栈,那么如果出栈顺序正确,最后栈空。否则栈不空。
代码
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> s;
int len=pushV.size(),i=0,j=0;
while(i<len){
if(pushV[i]!=popV[j])
s.push(pushV[i]);
else
j++;
i++;
}
while(s.top()==popV[j]&&j<len){
s.pop();
j++;
}
return s.empty();
}
};