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};
        }
    }
    
  • 相关阅读:
    原型模式
    哈希表原理
    Pow共识算法
    C++虚函数的工作原理
    TCP三次握手与四次分手
    TCP重置报文段及RST常见场景分析
    Ping、Traceroute工作原理
    ARP协议
    Rust生命周期bound用于泛型的引用
    Linux下core dump
  • 原文地址:https://www.cnblogs.com/mapoos/p/14783014.html
Copyright © 2011-2022 走看看