栈的压入、弹出序列

**

栈的压入、弹出序列

题目出处:https://www.acwing.com/problem/content/description/40/
在这里插入图片描述
样例:压入1 2 3 4,弹出4,压入5,弹出5 3 2 1,所以序列二符合要求,故结果为True。

解题思路,用栈一个个的读取压入序列中的每个数据,每次读取完全后,判断一下栈顶是否为弹出序列的当前值,如果是,要比较的值就变为弹出序列的下一个值,一直循环到当前栈顶元素与弹出序列当前值不相等为止,循环完毕后如果栈中元素为空,则说明弹出序列符合要求,反之不符合要求,举两个例子。

例1:压入[1 2 3 4 5]弹出[4 5 3 2 1]
Step 1 当前栈中元素1 弹出序列当前值4
Step 2 当前栈中元素1 2 弹出序列当前值4
Step 3 当前栈中元素1 2 3 弹出序列当前值4
Step 4 当前栈中元素1 2 3 4 弹出序列当前值4
Step 5 当前栈中元素1 2 3 弹出序列当前值5
Step 6 当前栈中元素1 2 3 5 弹出序列当前值5
Step 7 当前栈中元素1 2 3 弹出序列当前值3
Step 8 当前栈中元素1 2 弹出序列当前值2
Step 9 当前栈中元素1 弹出序列当前值1
Step 10 当前栈中元素NULL
所以弹出序列符合要求。

例2:压入[1 2 3 4 5]弹出[4 3 5 1 2]
Step 1 当前栈中元素1 弹出序列当前值4
Step 2 当前栈中元素1 2 弹出序列当前值4
Step 3 当前栈中元素1 2 3 弹出序列当前值4
Step 4 当前栈中元素1 2 3 4 弹出序列当前值4
Step 5 当前栈中元素1 2 3 弹出序列当前值3
Step 6 当前栈中元素1 2 弹出序列当前值5
Step 7 当前栈中元素1 2 5 弹出序列当前值5
Step 8 当前栈中元素1 2 弹出序列当前值1
Step 9 当前栈中元素1 2
所以弹出序列不符合要求。

参考AC代码如下:

class Solution {
public:
    bool isPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int>s;
        int len1 = pushV.size(),len2 = popV.size(),index = 0;
        if(len1!=len2)return false;
        if(!len1&&!len2)return true;
        for(int i = 0;i<len1;i++){
            s.push(pushV[i]);
            while(!s.empty()&&s.top()==popV[index])index++,s.pop();
        }
        if(s.empty())return true;
        else return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值