题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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();
	}
};