判断出栈序列是否合理问题,看了半天,栈的问题还是用另一个栈解决比较方便,原因就是性质是一样的。
在这个问题中,知道了入栈序列和出栈序列,那么我们用一个栈模拟入栈,用出栈序列约束其出栈元素。
(1):将入栈序列中元素压入栈
(2):判断栈顶元素是否等于出栈元素,等于即将其pop(),出栈序列加一,重复判断
(3):循环(1)(2),直到入栈序列所有元素被遍历
(4):判断栈是否为空,若为空,则意味着出栈序列合理的,否则,不合理
代码:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int> st;
        int l = pushV.size();
        int pushind = 0,popind = 0;

        while(pushind < l){
            st.push(pushV[pushind]);
            while(!st.empty() & st.top() == popV[popind]){
                st.pop();
                popind++;
            }
            pushind++;
            }
        if(st.empty())
            return true;
        else
            return false;
    }
};