#P1460. 2024.10.12-秋招-第3题-寻找重复目录

2024.10.12-秋招-第3题-寻找重复目录

题目内容

某文件系统中存在一些重复的文件夹,需要找出来并删除。

重复文件夹的定义:如果存在两个(或以上)的文件夹,包含非空且相同的子文件夹,且子文件夹的结构也相同,则认为这些文件夹是重复文件夹。重复文件夹可以属于不同的文件层级。

例如,存在如下文件夹结构:

/a/x/y//a/x/y/

/a/z//a/z/

/b/x/y//b/x/y/

/b/z//b/z/

则文件夹 /a//a//b//b/ 为重复文件夹。

如果再新增一个 /b/w//b/w/ 文件夹,则 /a//a//b//b/ 不再是重复文件夹,但 /a/x//a/x//b/x//b/x/ 仍为重复文件夹,/a/z//a/z//b/z//b/z/ 不算作重复文件夹,因为 zz 目录下是空的。

给你一组数组 pathspaths ,表示系统中所有存在的文件夹结构,请找出所有的重复文件夹。

如果重复文件夹之间存在父子关系,只返回父文件夹即可(即如果 /a//a//a/x//a/x/ 均为重复文件夹,只返回 /a//a/ 即可),并按字典序返回。

如果不存在重复目录,返回字符串 NotFoundNotFound

输入描述

输入由多行组成,第一行表示 pathspaths 中的元素个数 nn,第22~n+1n+1行为 nn 个路径名。

每个路径以 "/" 开头和结尾,中间每个层级以 "/" 分隔。

1paths.length2×1041≤paths.length≤2×10^4

pathspaths 中每个路径的层数 500≤500

11≤ 每层文件夹名称的长度 10≤10

paths[i]paths[i]由小写英文字母和 / 组成,

pathspaths 中的路径不存在重复。

输出描述

返回所有重复文件夹的路径名,每行一个,路径的格式与输入格式一致,各个路径的顺序按字母升序排列。

样例1

输入

4
/a/x/y/
/a/z/
/b/x/y/
/b/z/

输出

/a/
/b/

样例2

输入

5
/a/x/y/
/a/z/
/b/x/y/
/b/z/
/b/w/

输出

/a/x/
/b/x/

样例3

输入

4
/a/x/y/
/a/z/
/b/z/
/b/w/

输出

NotFound

样例4 (塔子哥补充的,实际没有)

输入

11
/a/
/a/b/
/a/d/
/a/b/a/
/a/b/c/
/a/c/a/
/a/c/c/
/a/d/f/
/a/d/d/
/a/e/f/
/a/e/d/

输出

/a/b/
/a/c/
/a/d/
/a/e/