找到系统中重复的文件。给定一个目录信息列表,包含目录路径以及文件的内容。找出这个重复的文件的路径。
举例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