Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法).docx
-
资源ID:143871888
资源大小:11.31KB
全文页数:2页
- 资源格式: DOCX
下载积分:5金贝
快捷下载
![游客一键下载](/images/hot.gif)
账号登录下载
微信登录下载
微信扫一扫登录
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
|
下载须知 | 常见问题汇总
|
Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法).docx
Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法)609. 在系统中查找重复文件给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径。一组重复的文件至少包括二个具有完全相同内容的文件。输入列表中的单个目录信息字符串的格式如下:“root/d1/d2/dm f1.txt(f1_content) f2.txt(f2_content) fn.txt(fn_content)”这意味着有 n 个文件(f1.txt, f2.txt fn.txt 的内容分别是 f1_content, f2_content fn_content)在目录 root/d1/d2/dm 下。注意:n>=1 且 m>=0。如果 m=0,则表示该目录是根目录。该输出是重复文件路径组的列表。对于每个组,它包含具有相同内容的文件的所有文件路径。文件路径是具有下列格式的字符串:“directory_path/file_name.txt”示例 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”注:最终输出不需要顺序。您可以假设目录名、文件名和文件内容只有字母和数字,并且文件内容的长度在 1,50 的范围内。给定的文件数量在 1,20000 个范围内。您可以假设在同一目录中没有任何文件或目录共享相同的名称。您可以假设每个给定的目录信息代表一个唯一的目录。目录路径和文件信息用一个空格分隔。超越竞赛的后续行动:假设您有一个真正的文件系统,您将如何搜索文件?广度搜索还是宽度搜索?如果文件内容非常大(GB级别),您将如何修改您的解决方案?如果每次只能读取 1 kb 的文件,您将如何修改解决方案?修改后的解决方案的时间复杂度是多少?其中最耗时的部分和消耗内存的部分是什么?如何优化?如何确保您发现的重复文件不是误报?class Solution public List<List<String>> findDuplicate(String paths) List<List<String>> list = new ArrayList<List<String>>(); Map<String, Integer> map = new HashMap<String, Integer>(); int index = 0; for (String str : paths) String strs = str.split(" "); for (int i = 1; i < strs.length; i+) String key = strsi.substring(strsi.indexOf("(") + 1, strsi.indexOf(")"); if (!map.containsKey(key) map.put(key, index+); list.add(new ArrayList<String>(); list.get(map.get(key).add(strs0 + "/" + strsi.substring(0, strsi.indexOf("("); for (int i = list.size() - 1; i >= 0; i-) if (list.get(i).size() < 2) list.remove(i); return list;