题目地址:
https://leetcode.com/problems/find-duplicate-file-in-system/
给定 n n n个字符串,这些字符串的格式是,一个目录 + 空格 + 文件名(内容) + 空格 + 文件名(内容)……。求内容重复的文件路径,以列表嵌套列表的形式返回,每个内列表就是内容相同的文件路径。如果有文件的内容是独一无二的,则不统计它。
开个哈希表,直接对每个字符串,解析出内容和文件路径,然后将内容相同的文件路径归纳起来即可。代码如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Solution {
public List<List<String>> findDuplicate(String[] paths) {
List<List<String>> res = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for (String path : paths) {
String[] sp = path.split(" ");
for (int i = 1; i < sp.length; i++) {
String s = sp[i];
int pos = s.lastIndexOf('(');
String cont = s.substring(pos + 1, s.length() - 1), file = sp[0] + '/' + s.substring(0, pos);
map.putIfAbsent(cont, new ArrayList<>());
map.get(cont).add(file);
}
}
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
if (entry.getValue().size() > 1) {
res.add(entry.getValue());
}
}
return res;
}
}
时间、空间复杂度与 n n n和文件个数、内容长度都有关。