《剑指offer》面试题22:
修正:
下面的代码更加简洁一点,每次入栈完后有一个快照,看看是否可以弹出,弹出了又是一个快照,需要再次检测。
最后检查栈是否完全弹出,而且pop数组到达最后。
public static boolean isPushPopSameStack(Integer[] push, Integer[] pop){
Stack stack = new Stack<Integer>();
int pop_length = pop.length;
int pop_index = 0;
for(int i=0;i<push.length;i++) {
stack.push(push[i]);
while(stack.size()!=0 && pop[pop_index]==stack.peek()) {
stack.pop();
pop_index += 1;
}
}
return stack.size()==0 && pop_index == pop_length;
}
以前的代码,没有那么简洁。
def StackOrderRight(data_push=[1,2,3,4,5],data_pop=[2,1,3,5,4]):
stack = []
stack_ptr = -1
data_has_push = 0
data_has_pop = 0
while data_has_push < len(data_push):
stack.append(data_push[data_has_push])
stack_ptr += 1
data_has_push += 1
while stack_ptr>=0 and stack[stack_ptr] == data_pop[data_has_pop]:
del stack[stack_ptr]
stack_ptr -= 1
data_has_pop += 1
while stack_ptr >= 0 and stack[stack_ptr] == data_pop[data_has_pop]:
stack.remove(stack_ptr)
stack_ptr -= 1
data_has_pop += 1
if data_has_pop == len(data_pop):
return True
else:
return False