From e52a76b04eee673c07a2b989efdc91095bacb066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A9=E8=BE=95=E9=BE=99=E5=84=BF?= Date: Wed, 8 Feb 2023 14:45:37 +0800 Subject: [PATCH] =?UTF-8?q?1233:=E5=88=A0=E9=99=A4=E5=AD=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/RemoveSubFoldersFromTheFilesystem.java | 77 +++++++++++++++++++ .../RemoveSubFoldersFromTheFilesystem.md | 47 +++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/RemoveSubFoldersFromTheFilesystem.java create mode 100644 src/main/java/leetcode/editor/cn/doc/content/RemoveSubFoldersFromTheFilesystem.md diff --git a/src/main/java/leetcode/editor/cn/RemoveSubFoldersFromTheFilesystem.java b/src/main/java/leetcode/editor/cn/RemoveSubFoldersFromTheFilesystem.java new file mode 100644 index 0000000..f45e613 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/RemoveSubFoldersFromTheFilesystem.java @@ -0,0 +1,77 @@ +//

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

+// +//

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

+// +//

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

+// +// +// +//

 

+// +//

示例 1:

+// +//
+//输入:folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]
+//输出:["/a","/c/d","/c/f"]
+//解释:"/a/b" 是 "/a" 的子文件夹,而 "/c/d/e" 是 "/c/d" 的子文件夹。
+//
+// +//

示例 2:

+// +//
+//输入:folder = ["/a","/a/b/c","/a/b/d"]
+//输出:["/a"]
+//解释:文件夹 "/a/b/c" 和 "/a/b/d" 都会被删除,因为它们都是 "/a" 的子文件夹。
+//
+// +//

示例 3:

+// +//
+//输入: folder = ["/a/b/c","/a/b/ca","/a/b/d"]
+//输出: ["/a/b/c","/a/b/ca","/a/b/d"]
+// +//

 

+// +//

提示:

+// +// +// +//
Related Topics
  • 字典树
  • 数组
  • 字符串

  • 👍 112
  • 👎 0
  • +package leetcode.editor.cn; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +// 1233:删除子文件夹 +public class RemoveSubFoldersFromTheFilesystem { + public static void main(String[] args) { + Solution solution = new RemoveSubFoldersFromTheFilesystem().new Solution(); + // TO TEST + } + + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public List removeSubfolders(String[] folder) { + List res = new ArrayList<>(); + Arrays.sort(folder); + res.add(folder[0]); + for (int i = 1; i < folder.length; i++) { + if (!folder[i].startsWith(res.get(res.size() - 1) + "/")) { + res.add(folder[i]); + } + } + return res; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} diff --git a/src/main/java/leetcode/editor/cn/doc/content/RemoveSubFoldersFromTheFilesystem.md b/src/main/java/leetcode/editor/cn/doc/content/RemoveSubFoldersFromTheFilesystem.md new file mode 100644 index 0000000..3b15213 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/content/RemoveSubFoldersFromTheFilesystem.md @@ -0,0 +1,47 @@ +

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

    + +

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

    + +

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

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

     

    + +

    示例 1:

    + +
    +输入:folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]
    +输出:["/a","/c/d","/c/f"]
    +解释:"/a/b" 是 "/a" 的子文件夹,而 "/c/d/e" 是 "/c/d" 的子文件夹。
    +
    + +

    示例 2:

    + +
    +输入:folder = ["/a","/a/b/c","/a/b/d"]
    +输出:["/a"]
    +解释:文件夹 "/a/b/c" 和 "/a/b/d" 都会被删除,因为它们都是 "/a" 的子文件夹。
    +
    + +

    示例 3:

    + +
    +输入: folder = ["/a/b/c","/a/b/ca","/a/b/d"]
    +输出: ["/a/b/c","/a/b/ca","/a/b/d"]
    + +

     

    + +

    提示:

    + +
      +
    • 1 <= folder.length <= 4 * 104
    • +
    • 2 <= folder[i].length <= 100
    • +
    • folder[i] 只包含小写字母和 '/'
    • +
    • folder[i] 总是以字符 '/' 起始
    • +
    • 每个文件夹名都是 唯一
    • +
    + +
    Related Topics
  • 字典树
  • 数组
  • 字符串

  • 👍 112
  • 👎 0
  • \ No newline at end of file