入栈出栈问题

声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
给定无重复元素的两个等长数组,分别表述入栈序列和出栈序列,
请问:这样的出栈序列是否可行
如:入栈序列为"ABCDEFG",出栈序列为"BAEDFGC",则可行
入栈序列"ABCD",出栈序列"BDAC",不可行
分析:
1.使用一个堆栈S来模拟压栈出栈的操作.记入栈序列为A,出栈序列为B
2.遍历B的每个元素b:
(1).若b等于栈顶元素s,恰好匹配,则检查B的下一个元素,栈顶元素s出栈;
若栈s为空,则认为b无法与栈内元素匹配,则调用(2)
(2).若b不等于栈顶元素s,则将A的当前元素入栈,目的是希望在A的剩余元素中找到b
Java版本实现:

public static boolean isPossible(char[] in, char[] out){
        Stack<Character> stack = new Stack<>();
        int i=0;
        int j=0;
        while(i<out.length){
            if (!stack.isEmpty()) {
                if (stack.peek() == out[i]) {
                    stack.pop();
                    i++;
                }else {
                    if (j > in.length-1) {//如果in遍历完,则返回false
                        return false;
                    }
                    stack.push(in[j]);
                    j++;
                }
            }else {
                if (j > in.length-1) {
                    return false;
                }
                stack.push(in[j]);
                j++;
            }
        }
        return true;
    }

测试代码:

public static void main(String[] args) {
        String in = "ABCDEFG";
        String out = "BAEDFGC";
        boolean b = isPossible(in.toCharArray(), out.toCharArray());
        System.out.println(b);
        in = "ABCD";
        out = "BDAC";
        b = isPossible(in.toCharArray(), out.toCharArray());
        System.out.println(b);
    }

输出结果:
true
false
代码可进一步优化,合并判断分支,如下:

public static boolean isPossible2(char[] in, char[] out){
        Stack<Character> stack = new Stack<>();
        int i=0;
        int j=0;
        while(i<out.length){//遍历out的每一个字符
            if (!stack.isEmpty() && stack.peek() == out[i]) {
                stack.pop();
                i++;
            }else {
                if (j > in.length-1) {//如果in遍历完,则返回false
                    return false;
                }
                stack.push(in[j]);
                j++;
            }
        }
        return true;
    }

同样可以实现上述功能,代码看上去更简洁。

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

推荐阅读更多精彩内容

  • 关于阿里的一道面试题,如果abcdef顺序入栈,那么下面不可能出现的出栈顺序是: 对于这样的题,也不是无规律可循,...
    夏广成阅读 7,504评论 0 1
  • 1、算法的概念 (1)概念:是指解题方案的准确而完整的描述。 【考题1】在计算机中,算法是指() A查询方法B加工...
    成都小菜阅读 1,727评论 0 15
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,418评论 11 349
  • 中学历史就对军阀阶段比较混淆,所以开始对一部讲张学良的电视剧不感冒。周末在乐乐家边吃饭边看电视,觉得少帅很有味儿,...
    cindy幸福在路上阅读 464评论 1 1
  • 这两天项目需要将报文以xml格式推送给核心,过程中使用到RestTemplate,并且在自己拼接xml时使用了St...
    James2119阅读 2,553评论 0 0