题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
以 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