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};
        }
    }
    
  • 相关阅读:
    在Ubuntu 桌面版 12.04 LTS安装并运行SSH
    将Tp-link无线路由器桥接到Dlink无线路由器上
    如何解决Win7将任务栏程序自动分组的困扰
    安装Ubuntu 桌面版 12.04 LTS 过程之记录
    #lspci | grep Eth
    做技术不能人云亦云
    如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
    在Fedora8上安装使用ActiveMQ5.8
    多态继承中的内存图解 && 多态中的对象变化的内存图解
    孔子装爹案例_帮助理解多态的成员访问特点及转型
  • 原文地址:https://www.cnblogs.com/mapoos/p/14783014.html
Copyright © 2011-2022 走看看