你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。

如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] 的 子文件夹

文件夹的「路径」是由一个或多个按以下格式串联形成的字符串:'/' 后跟一个或者多个小写英文字母。

  • 例如,"/leetcode" 和 "/leetcode/problems" 都是有效的路径,而空字符串和 "/" 不是。

字符串比较,a/b/c ; a/b/c/d ; a/b/d 这是有序的3个字符串,比较是当找到第一个不同的字符就返回结果,所以有前缀关系的,在有序数组中距离更近。

两头的 a/b/c 和 a/b/d 没有前缀关系,a/b/c的子文件夹都一定在 a/b/d之前。

根据字符串的比较规则,一个文件夹的父文件夹如果存在,在有序列表中,一定是最后一个没有父文件夹的文件夹。

定义一个数组存结果,结果都是没有父文件夹的,结果的子文件夹一定出现在它之后,并且在下一个结果出现之前。

附上代码,这个博客不支持语言:typescript

不过跟js比,除了函数定义那块儿,剩下部分没区别

function removeSubfolders(folder: string[]): string[] {
    folder.sort();
    let result=[folder[0]];
    for(let i=1;i<folder.length;i++){
        if(!folder[i].startsWith(result[result.length-1]+'/')){
            result.push(folder[i]);
        }
    }
    return result;
};