21. El empuje pila, secuencia de pop
problema:
Dos secuencia de entrada de números enteros, la primera secuencia que representa un orden de apilamiento prensado, determina si es posible para la segunda secuencia de la orden de la pila emergente. Todas las cifras no se insertan en la pila se supone igual. Tal como se pulsa una secuencia de una secuencia de 1,2,3,4,5 en la pila, la secuencia de empuje es 4,5,3,2,1 secuencia correspondiente a una secuencia de oposición, pero 4,3,5,1,2 es imposible empujar secuencia emergente de la secuencia. (Nota: la longitud de las dos secuencias son iguales)
solución:
pensado:
Borrow una pila auxiliar, orden de recorrido de empuje, en una primera conversación sobre la pila, aquí 1, se determina a continuación, el elemento superior no está fuera de la primera orden de apilamiento elemento, esto es 4, es evidente que a ≠ 4 así que continuamos empujando hasta después del inicio de una pila de igualdad, la pila es un elemento, se moverá hacia atrás una, hasta que la orden no es igual a la pila, por lo que el recorrido de ciclo de pedido Yazhan es completa, si la pila auxiliar no está vacía secuencia descrita no es la secuencia de la pila pop pop.
Por ejemplo:
dibujo 1,2,3,4,5
pila 4,5,3,2,1
1 en la primera pila auxiliar, cuando la pila 1 ≠ 4, continuación pila 2
En este momento, la pila 2 ≠ 4, continuar para apilar 3
En este momento, la pila 3 ≠ 4, 4 continúan pila
En este momento, la pila 4 = 4, la pila 4, una parte posterior secuencia de pop-up, en este caso la pila auxiliar 5 en el interior 1,2,3 ,,
En este momento, la pila 3 ≠ 5, 5 continúan empujando
5 = En este punto la pila 5, la pila 5, una parte posterior secuencia de pop-up, en este caso la pila auxiliar 3, que es 2,3 ,,
....
Seguido por la aplicación, y, finalmente, la pila auxiliar está vacía. Si no está vacía secuencia emergente descrito no es la secuencia de la pila pop.
código Python:
# -*- coding:utf-8 -*-
class Solution:
def IsPopOrder(self, pushV, popV):
# write code here
if not pushV or len(pushV)!=len(popV):
return False
stack=[]
for i in pushV:
stack.append(i)
while(len(stack) and stack[-1]==popV[0]):
stack.pop()
popV.pop(0)
if(len(stack)):
return False
return True