刷题的日常-删除子文件夹

465 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

刷题的日常-2023年2月8号

一天一题,保持脑子清爽

删除子文件夹

来自leetcode的 1233 题,题意如下:

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

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

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

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

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出一个字符串数组表示文件夹路径
  • 每个字符代表单独的文件夹
  • 要求我们将子文件夹删除
  • 然后返回剩余的文件夹

做题思路

一眼就知道和前缀有关,那么可以用前缀树来实现这道题。因为要保留的是前缀,所以我们需要将数组进行排序,让文件夹按字典序排好,然后从前往后扫描,如果是子文件夹,那么一定会先出现。然后我们需要实现前缀树,将文件夹一个个往里放,如果出现过父文件夹,就不需要往里放,如果没出现过,加入前缀树和结果集中。步骤如下:

  • 将文件夹进行排序
  • 实现前缀树
    • 前缀树需要一个根节点
    • 节点信息包含是否出现过文件夹以及子节点信息
  • 往字典树里存放的时候,需要判断树里是否已经包含过文件夹信息,如果已包含,返回false
  • 如果扫描到最后仍旧没有出现,那么新增节点,并且返回加入成功

代码实现

代码实现如下:。 image.png image.png