我的思路:
-
创建一个$\text{bool}$ 变量 $\text{flag}$,表示本轮中是否发生了入栈或者出栈的操作,如果发生了,则将 $\text{flag}$ 置为 False;
-
每一轮中,首先判断,栈是否为空、弹出序列是否为空、栈顶元素与弹出序列的第一个元素是否相等;
-
三个条件都满足了的话,则弹出栈顶元素stack.pop(),并弹出 弹出序列中的第一个元素popV.pop(0),并将 $\text{flag}$ 置为 False;
-
前面条件不成立的话,再进行判断输入序列是否为空,不为空的话,将输入序列的第一个元素弹出,并添加到栈中。
-
最后修改 $\text{flag}$ 的值,flag = not flag
python代码
class Solution(object):
def isPopOrder(self, pushV, popV):
"""
:type pushV: list[int]
:type popV: list[int]
:rtype: bool
"""
stack = []
flag = True # 如果本轮中未发生插入或弹出操作,则停止循环
while flag:
if stack and popV and stack[-1] == popV[0]:
flag = False
stack.pop()
popV.pop(0)
elif pushV:
stack.append(pushV.pop(0))
flag = False
flag = not flag
if stack:
return False
return True
最后的判断还要加个 or popV吧,防止辅助栈空了但是出栈序列还有值。