题解 | #栈的压入、弹出序列#

栈的压入、弹出序列

http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

以 i 为标准,判断 stack 栈顶 与 popV 不同就不断入栈,直到找到相同。(这里有一个边界,开始时栈空是没有栈顶,但是需要入栈)
此时进入第二个循环,找栈顶与popV相同就不断出栈,直到不同。
结束第一个循环。
如果此时 i 已经超出边界,则说明 此时无其他可以入栈,并且,此时也没有栈顶与popV相同。这个也是边界条件,作为退出条件。
最后栈为空,则说明是弹出序列之一,否则,则不是。
# -*- coding:utf-8 -*-
class Solution:
    def IsPopOrder(self, pushV, popV):
        stack = []
        i = 0
        j = 0
        while i < len(pushV):
            while (i < len(pushV) and len(stack) == 0)&nbs***bsp;(i < len(pushV) and stack[-1] != popV[j]):
                    stack.append(pushV[i])
                    i +=1
            while len(stack) > 0 and j < len(popV) and stack[-1] == popV[j]:
                    stack.pop(-1)
                    j +=1
        return len(stack) == 0
            

全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务