【剑指Offer】栈的压入、弹出序列

问题描述:

输入两个整数序列,第一个序列表示栈的压入顺序,
请判断第二个序列是否为该栈的弹出顺序。假设压入
栈的所有数字均不相等。例如序列1,2,3,4,5是某栈
的压入顺序,序列4,5,3,2,1是该压栈序列对应的
一个弹出序列,但4,3,5,1,2就不可能是该压栈序列
的弹出序列。

算法描述:

首先判断两个序列的元素数目是否相等, 
不相等,则肯定不是; 
相等,进入下一步: 
遍历Pop,每遍历一个数,先将Push数组里的压入栈,以i为push数组游标, 
直到栈顶值与当前Pop值相等, 
,然后弹出栈顶值,如果 
直到i大于push数组的大小还没碰到栈顶值与pop数组相等 
的值,则返回false

代码

class Solution {
public:
    bool IsPopOrder(vector<int> pushV, vector<int> popV) {
        if (pushV.size() != popV.size())
            return false;
        stack<int> s;
        int i = 0;
        for (int popData : popV)
        {
            while (s.empty() || s.top() != popData) {
                if (i == pushV.size())
                    return false;
                s.push(pushV[i++]);
            }
            s.pop();
        }
        return true;
    }
};