zoukankan      html  css  js  c++  java
  • 609. Find Duplicate File in System

    寻找重复文件的路径集合

    /*
            没有什么特别的技巧,就是用map存储相同内容的路径,核心就是getOrDefault()方法
            注意步骤,想清楚思路
             */
            //记录结果
            Map<String,ArrayList> map = new HashMap<>();
            for (String path :
                    paths) {
                //把根路径和各个文件分开
                String[] files = path.split(" ");
                //遍历每个文件,有两个任务,一是存下改文件内容,二是把该文件的路径记录下来
                for (int i = 1; i < files.length; i++) {
                    String file = files[i];
                    //记录文件路径的容器,由于要不断添加,所以选择可以改变的StringBulider
                    StringBuilder temp = new StringBuilder();
                    //添加根路径
                    temp.append(files[0]);
                    //别忘了跟路径后边要有个/
                    temp.append('/');
                    //记录从什么地方开始内容的开始
                    int j;
                    for (j= 0; j < file.length(); j++) {
                        if (file.charAt(j)!='(')
                        {
                            //只要不是内容开始的标志('(')就把路径添加
                            temp.append(file.charAt(j));
                        }
                        else break;
                    }
                    //记录下内容
                    String con = file.substring(j+1,file.length()-1);
                    //得到该内容的list,如果没有的话就新建一个
                    ArrayList list = map.getOrDefault(con,new ArrayList());
                    //添加上新的相同内容路径
                    list.add(new String(temp));
                    //重新加入到map
                    map.put(con,list);
                }
            }
            //下面的工作的就是把map中存的list添加到结果中
            List<List<String>> res = new ArrayList<>();
            for (String s:
                    map.keySet()) {
                //注意这里有个小陷阱,如果没有重复的话,就不添加这个list
                if (map.get(s).size()>1)
                res.add(map.get(s));
            }
            return res;
  • 相关阅读:
    洛谷P1908《逆序对》
    洛谷P3884《[JLOI2009]二叉树问题》
    最近公共祖先 LCA
    洛谷P1531《I Hate It》
    洛谷P1563「NOIP2016」《玩具谜题》
    乘法逆元求法
    CF56E 【Domino Principle】
    CF638C 【Road Improvement】
    Luogu
    2018.8.7提高B组模拟考试
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8284534.html
Copyright © 2011-2022 走看看