zoukankan      html  css  js  c++  java
  • 0609. Find Duplicate File in System (M)

    Find Duplicate File in System (M)

    题目

    Given a list paths of directory info, including the directory path, and all the files with contents in this directory, return all the duplicate files in the file system in terms of their paths. You may return the answer in any order.

    A group of duplicate files consists of at least two files that have the same content.

    A single directory info string in the input list has the following format:

    • "root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)"

    It means there are n files (f1.txt, f2.txt ... fn.txt) with content (f1_content, f2_content ... fn_content) respectively in the directory "root/d1/d2/.../dm". Note that n >= 1 and m >= 0. If m = 0, it means the directory is just the root directory.

    The output is a list of groups of duplicate file paths. For each group, it contains all the file paths of the files that have the same content. A file path is a string that has the following format:

    • "directory_path/file_name.txt"

    Example 1:

    Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)","root 4.txt(efgh)"]
    Output: [["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]]
    

    Example 2:

    Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)"]
    Output: [["root/a/2.txt","root/c/d/4.txt"],["root/a/1.txt","root/c/3.txt"]]
    

    Constraints:

    • 1 <= paths.length <= 2 * 10^4
    • 1 <= paths[i].length <= 3000
    • 1 <= sum(paths[i].length) <= 5 * 10^5
    • paths[i] consist of English letters, digits, '/', '.', '(', ')', and ' '.
    • You may assume no files or directories share the same name in the same directory.
    • You may assume each given directory info represents a unique directory. A single blank space separates the directory path and file info.

    题意

    给定一系列文件夹和各自拥有的文件加文件内容,要求按照文件内容进行分类,输出所有文件内容相同的文件的绝对路径的集合(至少有两个元素)。

    思路

    直接用HashMap创建inverted index即可。


    代码实现

    Java

    class Solution {
        public List<List<String>> findDuplicate(String[] paths) {
            List<List<String>> ans = new ArrayList<>();
            Map<String, List<String>> map = new HashMap<>();
            
            for (String path : paths) {
                String[] split = path.split(" ");
                for (int i = 1; i < split.length; i++) {
                    String[] parsed = parse(split[i]);
                    map.putIfAbsent(parsed[1], new ArrayList<>());
                    map.get(parsed[1]).add(split[0] + "/" + parsed[0]);
                }
            }
            
            for (String key : map.keySet()) {
                if (map.get(key).size() > 1) {
                    ans.add(map.get(key));
                }
            }
            
            return ans;
        }
    
        private String[] parse(String file) {
            int index = file.indexOf("(");
            String name = file.substring(0, index);
            String content = file.substring(index + 1, file.length() - 1);
            return new String[]{name, content};
        }
    }
    
  • 相关阅读:
    数据库设计三大范式
    MySQL笔试题搜罗
    [转载]MySql事物处理
    网页错误代码大全
    【转载】linux环境下大数据网站搬家
    Linux常用命令
    MongoDB概述
    Linux系统下通过命令行对mysql数据进行备份和还原
    wamp提示:与服务器的连接断开,请检查网络状况与服务器的运行状态的解决方法
    HDU 4578 线段树各种区间操作
  • 原文地址:https://www.cnblogs.com/mapoos/p/14783014.html
Copyright © 2011-2022 走看看