面试题22:栈的压入、弹出序列

栈的压入、弹出序列

这道题首先要借助一个辅助的数组,用来模拟实现的过程。

我想的有点复杂,把栈的push和pop分成两个步骤来想,其实没有必要,只需要将用一个循环实现push,在内部循环使用pop即可。

class Solution:
    def IsPopOrder(self, pushV, popV):
        if not pushV or not popV:
            return False
        stack = [pushV[0]]
        pushV.pop(0)
        while popV:
            b_p = popV[0]
            if pushV and b_p not in stack:
                while stack[-1] != b_p:
                    stack.append(pushV[0])
                    pushV.pop(0)
                popV.pop(0)
                stack.pop()
                continue
            else:
                if stack[-1] == b_p:
                    while stack and stack[-1] == b_p:
                        stack.pop()
                        popV.pop(0)
                    continue
                else:
                    break
        return False if popV else True

简化版,同时还没有修改传递进来的数组。

class Solution:
    def IsPopOrder(self, pushV, popV):
        stack = []
        j = 0
        for x in pushV:
            stack.append(x)
            while j < len(popV) and popV[j] == stack[-1]:
                stack.pop()
                j += 1
        return False if stack else True
posted @ 2017-08-07 16:11  banananana  阅读(196)  评论(0编辑  收藏  举报