zoukankan      html  css  js  c++  java
  • 考研机试 100.路径打印

    时间:2021/03/14

    一.题目描述

    给你一串路径,譬如: ac ade bcst d 你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样: a   b     c   d      e b   cst d 同一级的需要按字母顺序排列,不能乱。

    输入描述

    每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,
    接下来有n行,每行有一个字串表示一个路径,长度小于50。

    输出描述

    输出目录结构,每一个测试样例的输出紧跟一个空行。

    题目链接

    https://www.nowcoder.com/practice/64b472c9bed247b586859978d13145ad?tpId=40&tqId=21431&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey

    二.算法

    题解

    感觉这道题很迷,下面的代码能够通过自测输入中的样例,但是通过不了提交中的样例,但是对比的时候又说是完全一致的,emm。。。。。感觉思路是没有问题的,这里记录一下。首先要读入路径数n,然后对这些路径字符串进行排序,因为题目要求同一级的需要按照字母顺序排序。之后对每一个路径进行切割,因为在Java的正则表达式中,\代表其他语言中的,所以为了匹配,这里使用\\,具体见博文:https://blog.csdn.net/Breezeg/article/details/106501649,切割完字符串后开始对切割完的字符串进行循环,若当前字符串与上一个相同位置的字符串相同则不进行输出,若不同则先输出一定的数量的空格后再输出。

    代码

    import java.util.Scanner;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Main{
        
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            while(in.hasNext()){
                //读取输入
                int n = in.nextInt();
                //String empyt = in.nextLine();
                //HashMap<String, Integer> map = new HashMap<>();
                //ArrayList<String[]> list = new ArrayList<>();
                if(n != 0){
                    String[] path = new String[n];
                    for(int i = 0; i < n; i++){
                        //String[] path = (in.next()).split("\\");
                        path[i] = in.next();
                    }
                    //对路径数组进行排序
                    Arrays.sort(path);
                    ArrayList<String[]> list = new ArrayList<>();
                    for(int i = 0; i < n; i++){
                        String[] str = path[i].split("\\");
                        list.add(str);
                    }
                    String[] s = list.get(0);
                    for(int i = 0; i < s.length; i++){
                        for(int j = 0; j < i; j++){
                            System.out.print("  ");
                        }
                        System.out.println(s[i]);
                    }
                    for(int i = 1; i < n; i++){
                        String[] s1 = list.get(i - 1);
                        String[] s2 = list.get(i);
                        for(int j = 0; j < s2.length; j++){
    //                         System.out.println(j >= s1.length);
    //                         System.out.println(s1[j] != s2[j]);
    //                         System.out.println(s1[j]);
    //                         System.out.println(s2[j]);
                            if(j >= s1.length || !s1[j].equals(s2[j])){
                                for(int k = 0; k < j; k++){
                                    System.out.print("  ");
                                }
                                System.out.println(s2[j]);
                            }
                        }
                    }
                }else{
                    break;
                }
                System.out.println();
                //String empty = in.nextLine();
            }
            in.close();
        }
    }
    努力,向上,自律
  • 相关阅读:
    spl_autoload_register()和__autoload()区别
    编程语言相关科目
    类继承和重写的区别
    心理扭曲和心理变态含义分别是什么?
    java中的静态方法
    《深入理解JavaScript》—— JSON
    《深入理解JavaScript》—— Date
    《深入理解JavaScript》—— 正则表达式
    《深入理解JavaScript》—— 数组
    《深入理解JavaScript》—— 对象与继承(第2层)
  • 原文地址:https://www.cnblogs.com/machi12/p/14531506.html
Copyright © 2011-2022 走看看