1233。从文件系统中删除子文件夹
难度:中等
主题:数组、字符串、深度优先搜索、Trie
给定文件夹列表,返回删除这些文件夹中的所有子文件夹后的文件夹。您可以按任意顺序返回答案。
如果文件夹[i]位于另一个文件夹[j]内,则称为它的子文件夹。 folder[j] 的子文件夹必须以folder[j] 开头,后跟“/”。例如,“/a/b”是“/a”的子文件夹,但“/b”不是“/a/b/c”的子文件夹。
路径的格式是一个或多个以下形式的串联字符串:“/”后跟一个或多个小写英文字母。
- 例如,“/leetcode”和“/leetcode/problems”是有效路径,而空字符串和“/”则不是。
示例1:
- 输入:文件夹 = ["/a","/a/b","/c/d","/c/d/e","/c/f"]
- 输出: ["/a","/c/d","/c/f"]
- 说明: 文件夹“/a/b”是“/a”的子文件夹,“/c/d/e”位于我们文件系统中的文件夹“/c/d”内。
示例2:
- 输入:文件夹 = ["/a","/a/b/c","/a/b/d"]
- 输出: ["/a"]
- 说明:文件夹“/a/b/c”和“/a/b/d”将被删除,因为它们是“/a”的子文件夹。
示例 3:
- 输入:文件夹 = ["/a/b/c","/a/b/ca","/a/b/d"]
- 输出: ["/a/b/c","/a/b/ca","/a/b/d"]
约束:
- 1 4
- 2
- 文件夹[i]仅包含小写字母和“/”。
- 文件夹[i]始终以字符“/”开头。
- 每个文件夹名称都是唯一。
提示:
- 按字典顺序对文件夹进行排序。
- 将当前元素插入数组中,然后循环,直到我们删除所有子文件夹,重复此操作,直到没有元素留下。
解决方案:
我们可以结合使用排序和字符串比较。以下步骤概述了 PHP 中的解决方案:
按字典顺序对文件夹进行排序:按字典顺序对文件夹路径进行排序可确保任何子文件夹都会立即跟随其父文件夹。例如,在排序列表中,“/a”后面会跟着“/a/b”,这样我们就可以轻松检查子文件夹关系。
识别并过滤掉子文件夹:我们可以迭代排序的列表,检查当前文件夹路径是否是先前添加的路径的子文件夹。如果是,我们就跳过它。如果没有,我们会将其添加到我们的结果列表中。
在 PHP 中实现解决方案:我们跟踪添加到结果列表中的最后一个文件夹路径。如果当前文件夹以最后一个文件夹开头并紧跟一个 /,则它是一个子文件夹,应被忽略。
让我们用 PHP 实现这个解决方案:1233。从文件系统中删除子文件夹
<?php /** * @param String[] $folder * @return String[] */ function removeSubfolders($folders) { ... ... ... /** * go to ./solution.php */ } // Test cases $folder1 = ["/a","/a/b","/c/d","/c/d/e","/c/f"]; $folder2 = ["/a","/a/b/c","/a/b/d"]; $folder3 = ["/a/b/c","/a/b/ca","/a/b/d"]; print_r(removeSubfolders($folder1)); // Output: ["/a","/c/d","/c/f"] print_r(removeSubfolders($folder2)); // Output: ["/a"] print_r(removeSubfolders($folder3)); // Output: ["/a/b/c","/a/b/ca","/a/b/d"] ?>
解释:
排序:sort() 函数按字典顺序排列文件夹。这样可以更轻松地查找子文件夹关系,因为子文件夹将直接跟随其父文件夹。
-
循环遍历每个文件夹:
- 如果结果为空(第一次迭代)或者当前文件夹路径不是以最后添加的文件夹后跟 / 开头,则它不是子文件夹,并且会添加到结果数组中。
- 如果它确实以最后一个文件夹路径开头并且紧随其后有一个 /,则它是一个子文件夹,我们会跳过将其添加到结果中。
结果:函数返回结果,仅包含根文件夹,不包括任何子文件夹。
由于排序步骤,此方法的时间复杂度为 O(n log n),并且线性扫描的时间复杂度为 O(n ),使其成为问题约束内较大输入的良好解决方案。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
- 领英
- GitHub
以上是从文件系统中删除子文件夹的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。