栈的压入弹出顺序

2019-07-31  本文已影响0人  HamletSunS

题意:
条件:给出一个栈的输入序列和一个输出序列
问题:你判断输出序列是否合法,即通过输入序列的入栈顺序能否通过出栈操作得到输出序列。

思路:
设计一个栈,进行模拟和判断。
判断思路是先按照入栈顺序每次放入一个元素(for循环),然后开始检查当前是否可以出栈,只要满足出栈条件就出栈,直到不满足出栈条件(while循环)
可以出栈的条件为:

  1. 出栈索引合法
    (防止数组越界)
  2. 栈不为空
    (因为是在while循环里,可能栈会出空,若没有2直接判断3会数组越界)
  3. 栈的当前元素与输出序列相等
    (真正意义上的判断能否出栈,前2个条件是为了保证3的操作合法)
class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int n=pushV.size();
        if(n!=popV.size())
            return false;
        int idxIn=0,idxOut=0;
        stack<int> st;
        for(;idxIn<n;idxIn++){
            st.push(pushV[idxIn]);
            while(idxOut<n && !popV.empty() && st.top()==popV[idxOut]){
                st.pop();
                idxOut++;
            }
        }
        if(idxOut==n)
            return true;
        return false;
    }
};
上一篇下一篇

猜你喜欢

热点阅读