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 = strs[i].substring(strs[i].indexOf("(") + 1, strs[i].indexOf(")"));
if (!map.containsKey(key)) {
map.put(key, index++);
list.add(new ArrayList<String>());
}
list.get(map.get(key)).add(strs[0] + "/" + strs[i].substring(0, strs[i].indexOf("(")));
}
}
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i).size() < 2)
list.remove(i);
}
return list;
}
}
相关文章
- Java爱心代码_java怎么敲入代码
- 女生学java_Java Server Pages
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- java bufferedwriter 编码,Java BufferedWriter对象与utf-8
- java jpa是什么_jpa是什么框架?jpa是什么意思?
- Java编程语言简单常用的输入输出格式
- java启动器_JAVA基础:Java 启动器如何查找类
- 可以连接服务器无法发送邮件 诛仙,诛仙管理员连接Gdeliveryd服务器发送邮件的Java实现…[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- initialj — 我的第一个Java项目开发脚手架
- 【测开技能】Java语言系列(七) 字符和字符串
- java 文件上传到服务器_Java上传文件到服务器端的方法「建议收藏」
- java缓存技术的介绍
- JAVA读取csv文件_java读取csv文件某一列
- java压缩与解压(Java.util.zip)详解编程语言
- java搭建Linux环境下的Java SDK(sdk-linux)
- Java异步MySQL:开启数据处理新时代(java异步mysql)
- Java监控Oracle性能的最佳实践(java监控oracle)
- java随笔——HashMap与红黑树详解编程语言
- 实现使用Java实现Redis消息队列(redis消息队列java)
- Java程序更新MySQL记录的实践(java更新mysql)
- 深入浅出Java配置MySQL数据库(java配置mysql)
- 精益Java:MySQL轻松编程驱动应用(javamysql项目)
- 模式Java应用Redis中的过期模式实现(redisjava过期)
- Novice:学习Java 7 在Linux上的简单入门(java 7 linux)
- Linux与Java结合:开启全新的编程之旅(linux java())
- Oracle全面支持Java链技术构建数据库应用(java链oracle)
- Java连接Oracle实现简单快捷的数据传输(java联结oracle)
- 收购Oracle收购Java重新定义软件开发未来(java被oracle)
- java对指定目录下文件读写操作介绍
- Java获取最后插入MySQL记录的自增ID值的3种方法