成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[LeetCode] 609. Find Duplicate File in System

sf190404 / 2826人閱讀

Problem

Given a list of directory info including directory path, and all the files with contents in this directory, you need to find out all the groups of duplicate files in the file system in terms of their paths.

A group of duplicate files consists of at least two files that have exactly 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 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 group 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:

["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"]]

Note:
No order is required for the final output.
You may assume the directory name, file name and file content only has letters and digits, and the length of file content is in the range of [1,50].
The number of files given is in the range of [1,20000].
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. Directory path and file info are separated by a single blank space.

Follow-up beyond contest:

Imagine you are given a real file system, how will you search files? DFS or BFS?
If the file content is very large (GB level), how will you modify your solution?
If you can only read the file by 1kb each time, how will you modify your solution?
What is the time complexity of your modified solution? What is the most time-consuming part and memory consuming part of it? How to optimize?
How to make sure the duplicated files you find are not false positive?

Solution
class Solution {
    public List> findDuplicate(String[] paths) {
        List> res = new ArrayList<>();
        if (paths == null || paths.length == 0) return res;
        Map> map = new HashMap<>();
        
        for (String str: paths) {
            String[] parts = str.split(" ");
            String rootPath = parts[0];
            
            for (int i = 1; i < parts.length; i++) {
                String child = parts[i];
                for (int j = 0; j < child.length(); j++) {
                    //assuming there"s multiple "(", find the first
                    if (child.charAt(j) == "(") {
                        String childPath = child.substring(0, j);
                        String finalPath = rootPath + "/" + childPath;
                        String content = child.substring(j+1, child.length()-1);
                        if (!map.containsKey(content)) {
                            map.put(content, new ArrayList());
                        }
                        map.get(content).add(finalPath);
                    }
                    
                }
            }
            
        }
        
        for (Map.Entry> entry: map.entrySet()) {
            if (entry.getValue().size() > 1) res.add(entry.getValue());
        }
        return res;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77161.html

相關(guān)文章

  • LeetCode[287] Find the Duplicate Number

    摘要:復(fù)雜度思路每次通過二分法找到一個(gè)值之后,搜索整個(gè)數(shù)組,觀察小于等于這個(gè)數(shù)的個(gè)數(shù)??紤],小于這個(gè)位置的數(shù)的個(gè)數(shù)應(yīng)該是小于等于這個(gè)位置的。要做的就是像找中的環(huán)一樣,考慮重復(fù)的點(diǎn)在哪里。考慮用快慢指針。代碼把一個(gè)指針放回到開頭的地方 LeetCode[287] Find the Duplicate Number Given an array nums containing n + 1 in...

    canopus4u 評(píng)論0 收藏0
  • [LeetCode] Find the Duplicate Number

    Problem Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate nu...

    MoAir 評(píng)論0 收藏0
  • [LeetCode] 287. Find the Duplicate Number

    Problem Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate nu...

    rickchen 評(píng)論0 收藏0
  • [Leetcode] Find the Duplicate Number 找到重復(fù)數(shù)字

    摘要:暴力法復(fù)雜度時(shí)間空間思路如果不用空間的話,最直接的方法就是選擇一個(gè)數(shù),然后再遍歷整個(gè)數(shù)組看是否有跟這個(gè)數(shù)相同的數(shù)就行了。二分法復(fù)雜度時(shí)間空間思路實(shí)際上,我們可以根據(jù)抽屜原理簡化剛才的暴力法。 Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is bet...

    chnmagnus 評(píng)論0 收藏0
  • [Leetcode] Contains Duplicate 包含重復(fù)

    摘要:代碼集合法復(fù)雜度時(shí)間空間思路同樣使用集合,但這次我們要維護(hù)集合的大小不超過,相當(dāng)于是記錄一個(gè)寬度為的窗口中出現(xiàn)過的數(shù)字。 Contains Duplicate I Given an array of integers, find if the array contains any duplicates. Your function should return true if any v...

    rozbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

sf190404

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<