以 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