class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        // 压栈入栈的数字都不相同
        /*
            就是说,压和出我们模拟一下
            1 2 3   >  4
            1 2  > 3
            
        */
        
        // 通过模拟的方式,如果相同就跳过,如果不同那么就比较栈顶或者一直往后找
        
        int index_in = 0; // 代表的是压入栈的点
        int index_out = 0;
        stack<int> st_;
        while(index_in<pushV.size() && index_out<popV.size()) {
            if(pushV[index_in]==popV[index_out]) {
                index_in++;
                index_out++;
            } else if(!st_.empty() && popV[index_out]==st_.top()) {
                st_.pop();
                index_out++;
            } else {
                st_.push(pushV[index_in++]);
            }
        }
        
        while(!st_.empty() && index_out<popV.size()) {
            if(st_.top()==popV[index_out]) {
                index_out++;
                st_.pop();
            } else {
                return false;
            }
        }
        
        if(!st_.empty() || index_out!=popV.size()) {
            return false;
        }        
        
        return true;
    }
};