题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
//方法:辅助栈+模拟
三种情况分类讨论:
1.如果push和pop相同,则同时后移。
2. 如果push和pop不相同,但是pop和栈顶相同,则出栈,pop后移。
3.如果push和pop不相同,pop和栈顶也不相同,则push元素入栈,push后移。
循环上述三种情况,直到pop走到头, 返回栈是否为空的结果。
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> temp_stack;
int pop_n=0,push_n=0;
while(pop_n<popV.size())
{
if(popV[pop_n]==pushV[push_n])
{
pop_n++;
push_n++;
}
else
{
if(!temp_stack.empty()&&popV[pop_n]==temp_stack.top())//temp_stack.empty()放在前面,这样不会溢出
{
temp_stack.pop();
pop_n++;
}
else
{
temp_stack.push((pushV[push_n]));
push_n++;
}
}
}
return temp_stack.empty();
}
};