class Solution:
    def IsPopOrder(self , pushV: List[int], popV: List[int]) -> bool:
        stack = []
        for i in pushV:
            stack.append(i)

            while True:
                if stack and popV:
                    if stack[-1] == popV[0]:
                        stack = stack[:-1]
                        popV = popV[1:]
                    else:
                        break
                else:
                    break
        
        if len(stack) == len(popV) == 0:
            return True
        else:
            return False
          

简单易理解的python解法:

1.遍历pushV,将当前元素放入栈;

2.每次放入栈后开始检查:尽可能按照popV的当前顺序输出元素,如果有成功输出的序列,则将这些部分从popV中删除;

3.最终遍历pushV结束后,栈的总长和popV应该都为0,否则有无法弹出的元素。