21-栈的压入弹出序列

知识点:栈

一、题目描述:

二、方法:

借用一个辅助的栈tmp,遍历压栈序列pushV,先将压栈序列中的第一个值放入辅助栈tmp中,这里是1,然后判断辅助栈tmp的栈顶元素是不是出栈序列popV中的第一个元素,这里是4,很显然1≠4,所以我们继续将压栈序列中的第二个值放入辅助栈中。直到辅助栈的栈顶元素和出栈序列的第一个元素相等以后辅助栈开始出栈,出栈一个元素的同时并将出栈列序中的值向后移动一位,接着判断,直到不相等才停止出栈,继续向辅助栈存入。等压栈序列遍历完成后,如果辅助栈还不为空,说明弹出序列不是该入栈序列的弹出顺序。

三、代码实现:

C++:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int lenPush = pushV.size();
        int lenPop = popV.size();
        if(lenPush != lenPop){
            return false;
        }
        stack<int> tmp;
        for(int i=0,j = 0; i<lenPush; i++){
            tmp.push(pushV[i]);
            //判断栈顶元素是否同出栈序列的第一个元素相等,不相等则继续入栈
            while(tmp.top() == popV[j] && j<lenPop){
                tmp.pop();
                j++;
            }
        }
        if(tmp.empty()){
            return true;
        }
        return false;
        
    }
};

python:

# -*- coding:utf-8 -*-
class Solution:
    def IsPopOrder(self, pushV, popV):
        if len(pushV)!=len(popV):
            return False
        
        tmp = []
        i = 0
        j = 0
        for i in range(0,len(pushV)):
            tmp.append(pushV[i])
            while j<len(popV) and tmp[-1]==popV[j]:#这里是循环,不能写成条件判断
                tmp.pop()
                j += 1
        if len(tmp):
            return False
        return True

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值