给你一个入栈序列和出栈序列,看出栈序列是否可以模拟出来
解题思路:
最早了解到这种题的时候是大四考研接触过卡特兰数公式,其公式就是用来求解当前大小栈出栈的不同个数,今天做到了验证栈序列也算是忆往昔了吧
这个问题的求解的原则就是 先依次把入栈序列往栈里扔,如果当前栈顶的元素和出栈序列相同,那就把入栈的这个值弹出来,出栈序列指针向后走一下,如果栈顶元素无法对应当前出栈指针指向元素,那这次模拟的出栈序列就是不成立的。
class Solution:
def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool:
stack = []
cur = 0
for num in pushed:
stack.append(num)
while stack and popped[cur] == stack[-1]:
stack.pop()
cur += 1
return cur == len(popped)