LeetCode刷题实战609:在系统中查找重复文件程序IT圈关注共 2403字,需浏览 5分钟 ·2022-05-19 17:25 算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做 在系统中查找重复文件,我们先来看题面:https://leetcode.cn/problems/find-duplicate-file-in-system/给你一个目录信息列表 paths ,包括目录路径,以及该目录中的所有文件及其内容,请你按路径返回文件系统中的所有重复文件。答案可按 任意顺序 返回。一组重复的文件至少包括 两个 具有完全相同内容的文件。输入 列表中的单个目录信息字符串的格式如下:"root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)"这意味着,在目录 root/d1/d2/.../dm 下,有 n 个文件 ( f1.txt, f2.txt ... fn.txt ) 的内容分别是 ( f1_content, f2_content ... fn_content ) 。注意:n >= 1 且 m >= 0 。如果 m = 0 ,则表示该目录是根目录。输出 是由 重复文件路径组 构成的列表。其中每个组由所有具有相同内容文件的文件路径组成。文件路径是具有下列格式的字符串:"directory_path/file_name.txt"示例示例 1:输入:paths = ["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:输入:paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)"]输出:[["root/a/2.txt","root/c/d/4.txt"],["root/a/1.txt","root/c/3.txt"]]解题https://blog.csdn.net/weixin_44389717/article/details/1232664331、首先,通过字符串的split方法,以空格分割,将paths字符串分割各个values2、接着循环将各个部分提取出来,以每个文件的内容作为map的key,使用HashMap的getOrDefault(key,defaultValue)方法查询该key是否有值,如果没有则新建一个空的list为其做准备,并且接着put一个以文件内容为key,list为value的map3、此时,第一次循环遍历第一个文件内容就结束了,这时以Map类型为集合的第一个内容为(“abcd”,[“root/a/1.txt”])如此反复不断遍历,如果查询有这个key,那么就add在该key的value后面4、新建一个List5、遍历完成后,循环每一个key,如果该key的value长度大于1,则表示有重复的内容,那么将其存入新的数组6、最后返回即可HashMap< String, List < String >> map = new HashMap < > (); for (String path: paths) { String[] values = path.split(" "); for (int i = 1; i < values.length; i++) { String[] name_cont = values[i].split("\\("); name_cont[1] = name_cont[1].replace(")", ""); List < String > list = map.getOrDefault(name_cont[1], new ArrayList < String > ()); list.add(values[0] + "/" + name_cont[0]); map.put(name_cont[1], list); } } List < List < String >> res = new ArrayList< >(); for (String key: map.keySet()) { if (map.get(key).size() > 1) res.add(map.get(key)); } return res;上期推文:LeetCode1-600题汇总,希望对你有点帮助!LeetCode刷题实战601:体育馆的人流量LeetCode刷题实战602:好友申请 II :谁有最多的好友LeetCode刷题实战603:连续空余座位LeetCode刷题实战604:迭代压缩字符串LeetCode刷题实战605:种花问题LeetCode刷题实战606:根据二叉树创建字符串LeetCode刷题实战607:销售员LeetCode刷题实战608:树节点 浏览 10点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 dupeGuru重复文件查找工具dupeGuru 它可以让你找到重复的文件到你的PC机上。它可以扫描或文件名或目录,可以帮您找到像重dupeGuru重复文件查找工具dupeGuru它可以让你找到重复的文件到你的PC机上。它可以扫描或文件名或目录,可以帮您找到像重复的文件名,只要在几分钟内就可以轻松找到。【软件特点】dupeGuruME可以做dupeGuru所能做利用 Linux 查找重复文件马哥Linux运维0利用 Linux 查找重复文件杰哥的IT之旅0利用 Linux 查找重复文件程序员大白0LeetCode刷题指南!Datawhale0在IDE中刷LeetCode,编码调试一体化,刷题效率直线up!视学算法0fdupe查找重复文件的Perl脚本fdupe 是一个很小的 Perl 脚本,用来检索指定目录并找出其中重复的文件,该脚本是通过文件内容fclones高效的重复文件查找器fclones是一个命令行工具,可以识别相同的文件组,并清除你不再需要的文件副本。它有大量的配置选项来控制搜索范围,并提供了许多删除重复文件的方法。为了获得最大的灵活性,它与其他Unix工具(如finfclones高效的重复文件查找器fclones 是一个命令行工具,可以识别相同的文件组,并清除你不再需要的文件副本。它有大量的配置选点赞 评论 收藏 分享 手机扫一扫分享分享 举报