验证栈的压入弹出序列是否正确(剑指offer P134 面试题22)

《剑指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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容