Skip to content

Latest commit

 

History

History
59 lines (49 loc) · 1.8 KB

609.Find Duplicate File in System.md

File metadata and controls

59 lines (49 loc) · 1.8 KB

题目

找到系统中重复的文件。给定一个目录信息列表,包含目录路径以及文件的内容。找出这个重复的文件的路径。

举例1:

输入:
["root/a 1.txt(abcd) 2.txt(efgh)", "root/c 3.txt(abcd)", "root/c/d 4.txt(efgh)", "root 4.txt(efgh)"]
输出:
[["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]]

举例2:

输入:
["root/a 1.txt(abcd) 2.txt(efgh)", "root/c 3.txt(higk)", "root/c/d 4.txt(lmn)", "root 4.txt(opq)"]
输出:
[]

思路

就是输出重复内容的文件的路径,内容相同的文件放在一个列表里,最终输出的结果是列表嵌套列表的结构。如果没有内容重复 的文件,则输出空列表。

判断内容是否重复,可以使用一个技巧,用集合set()去重,如果去重的数量没变,说明没有重复的,直接输出空列表即可。

代码

class Solution(object):
    def findDuplicate(self, paths):
        """
        :type paths: List[str]
        :rtype: List[List[str]]
        """
        all_paths = []
        for path in paths:
            files = []
            tmp = path.split(' ')
            nums = len(tmp) - 1
            for file in tmp[1:]:
                all_paths.append(tmp[0] + '/' + file)
        contents = []
        for each in all_paths:
            contents.append(each[each.index('(')+1:-1])
        result = []
        if len(set(contents)) == len(contents):
            return []
        for content in set(contents):
            if contents.count(content) > 1:
                tmp = []
                for i in range(len(contents)):
                    if content == contents[i]:
                        tmp.append(all_paths[i][:all_paths[i].index('(')])
                result.append(tmp)
        return result