删除子文件夹
难度:
标签:
题目描述
代码结果
运行时间: 52 ms, 内存: 29.8 MB
/*
* 使用Java Stream实现:
* 1. 对文件夹路径进行排序。
* 2. 过滤掉所有是其他路径的子文件夹的路径。
* 3. 收集结果并返回。
*/
import java.util.*;
import java.util.stream.*;
public class Solution {
public List<String> removeSubfolders(String[] folder) {
// 排序并过滤子文件夹
return Arrays.stream(folder)
.sorted()
.filter(f -> result.isEmpty() || !f.startsWith(result.get(result.size() - 1) + "/"))
.collect(Collectors.toList());
}
}
解释
方法:
首先对文件夹列表进行排序,以确保任何文件夹都会在其可能的子文件夹之前出现。然后,初始化一个空结果列表以及一个表示当前父文件夹的变量。遍历排序后的文件夹路径,对于每个路径,检查它是否以当前父文件夹为前缀。如果不是,更新当前的父文件夹并将其加入结果列表。这样可以确保只有最顶级的文件夹被加入到结果中,因为一旦一个文件夹被认定为父文件夹,所有的子文件夹(由于字符串排序的特性,子文件夹会紧随其后)都会被忽略。
时间复杂度:
O(n log n + nm)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么在检查是否为子文件夹时,需要将父文件夹路径后添加'/'进行比较?
▷🦆
在算法中,初始化`ind`为2的具体原因是什么?是否与文件夹路径的格式有关?
▷🦆
排序后的文件夹列表中,如何确保每个文件夹都在其可能的子文件夹之前?排序是否考虑了所有的边界情况,如文件夹名称相似但不同的情况?
▷🦆
如果输入的文件夹列表中包含重复的路径,这个算法处理上会有什么影响?
▷