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};
        }
    }
    
  • 相关阅读:
    解决Unsupported major.minor version 51.0问题的感悟
    python 自己实现for循环:
    去除(UTF8)格式文本中的Bom
    python range与xrange
    Permission denied: make_sock: could not bind to address处理
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    centos下postgresql的安装与配置 20101217 12:39:15
    android软键盘 android:windowSoftInputMode
    android 代码实现安装卸载apk
    Android有效解决加载大图片时内存溢出的问题
  • 原文地址:https://www.cnblogs.com/mapoos/p/14783014.html
Copyright © 2011-2022 走看看