思路:
因为是栈的压入和弹出,所以首先要有一个辅助栈,为了寻找popV中的值x1,首先要将PushV中x入栈, 然后将栈顶出栈,再看x2,如果是栈顶则直接出栈即可,如果不是栈顶,继续入栈直到找到这个值。如果栈空了,并且栈顶不是这个值,则错误。
如果是一个顺序:最后popV遍历完,栈空。
代码:
# -*- coding:utf-8 -*-
class Solution:
def IsPopOrder(self, pushV, popV):
# write code here
self.st = []
i = 0
j = 0
length = len(pushV)
flag = False
while j < length:
while len(self.st) == 0 or self.st[-1] != popV[j]:
if i == length: #如果此时已经遍历到了pushV的尽头
break
self.st.append(pushV[i])
i += 1
if i == length and self.st[-1] != popV[j]: #如果pushV到了尾部,但是栈顶元素不等于popV的元素,错误
break
if self.st[-1] == popV[j]: #如果相等,取出栈顶元素
del self.st[-1]
j += 1
if len(self.st) == 0 and j == length: #如果正确的结果:遍历完popV,且栈为空
flag = True
return flag