图解LeetCode——1233. 删除子文件夹(难道:中等)
一、题目
你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。
如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] 的 子文件夹 。
文件夹的「路径」是由一个或多个按以下格式串联形成的字符串:'/' 后跟一个或者多个小写英文字母。例如,"/leetcode" 和 "/leetcode/problems" 都是有效的路径,而空字符串和 "/" 不是。
二、示例
2.1> 示例 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.2> 示例 2:
【输入】folder = ["/a","/a/b/c","/a/b/d"]
【输出】["/a"]
【解释】文件夹 "/a/b/c" 和 "/a/b/d" 都会被删除,因为它们都是 "/a" 的子文件夹。
2.3> 示例 3:
【输入】 folder = ["/a/b/c","/a/b/ca","/a/b/d"]
【输出】 ["/a/b/c","/a/b/ca","/a/b/d"]
提示:
1<= folder.length <=4 * 10^42<= folder[i].length <=100folder[i]只包含小写字母和'/'folder[i]总是以字符'/'起始- 每个文件夹名都是 唯一 的
三、解题思路
根据题目描述,我们要删除所有的子目录,然后将文件夹列表 folder中剩余的目录输出即可。那么假设我们有一个目录/a,那么所有以/a开头的路径都是它的子目录,如下所示:
【主目录】
/a
【子目录】/a/a,/a/b,/a/b/c,/a/b/d/e/f/g,……
那么针对如上规则,我们首先需要做的就是对无序的文件夹列表 folder执行排序操作,当排序完毕后,相关的主目录和子目录就会被排列在一起。遍历排序后的文件列表folder,只将主目录保存到result中即可。但是,再描述具体操作之前,我们先来说明一下流程介绍所涉及的变量:
【folder[i]】表示遍历的每个
folder元素;
【result】用于存储最终结果集合;
【result(last) 】表示result中存储的最后一个元素;
具体处理逻辑,如下所示:
【case1】如果result为空,则直接将
folder[0]保存到result中;
【case2】如果result(last)满足folder[i]的前缀,则说明folder[i]属于子目录,i执行加1,遍历下一个目录;
【case3】如果result(last)不满足folder[i]的前缀,则说明folder[i]属于主目录,将folder[i]保存到result中,然后i执行加1,遍历下一个目录;
【结果】当遍历完所有folder列表后,result中存储的就是所有主目录。
以上就是这道题的解题思路,下面我们以输入folder是["/c/d","/a/ab","/a","/c/d/e","/a/b","/c/f/d","/c/f"]为例,看一下具体的处理过程:

四、代码实现
public class Solution {public List<String> removeSubfolders(String[] folder) {Arrays.sort(folder);List<String> result = new ArrayList<>();result.add(folder[0]);for (int i = 1; i < folder.length; i++) {StringBuilder sb = new StringBuilder(result.get(result.size() - 1)).append("/");if (!folder[i].startsWith(sb.toString())) result.add(folder[i]);}return result;}
}

今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」
相关文章:
图解LeetCode——1233. 删除子文件夹(难道:中等)
一、题目 你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。 如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] …...
Doris--简单使用
一、数据表的创建与数据导入 1.1、创建表 1.1.1、单分区 CREATE TABLE table1 (siteid INT DEFAULT 10,citycode SMALLINT,username VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0 -- 聚合模型, value column 使用sum聚合 ) AGGREGATE KEY(siteid, citycode, …...
使用GPT让你的RStudio如虎添翼
API的的调用目前来说不限制地区,但是OpenAI的API的申请限制了地区。运行的时候,如果出现了429,意味着你被限流了,需要等一会才行。 前提是,你需要注册一个OpenAI的账户,然后在https://openai.com/api/ 里申…...
Python 算法交易实验45 再探量化
说明 去年大部分精力都在构建底层架构和工具了,一直都没有时间搞量化。目前底层的数据库服务(ADB)和清洗(衍生 AETL) 工具已经好了,我想尽快的把量化启动起来。 内容 1 思想 作为交易来说,只有买卖。通过数据分析与模型,我们获得的增强点是决策。在合适的时候进行买卖的…...
Dubbo加载配置文件方式,加载流程,加载配置文件源码解析
配置方法 API配置 以Java编码的方式组织配置,Dubbo3配置API详解 :https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/api/#bootstrap-api public static void main(String[] args) throws IOException {ServiceConfig<Greet…...
十大开源测试工具和框架,一定有你需要的
目录 前言 Katalon Studio Selenium Appium JMeter SOAP UI Robot Framework Watir JUnit Robotium Citrus 总结 前言 免费的开源框架和工具由于其开源特性,现在逐渐成为自动化测试的首选解决方案。区别在于,你是喜欢使用类库编写一个全新的…...
加密技术在android中的应用
1、算法基础 算法基础参照linux的全盘加密与文件系统加密在android中的应用 消息摘要算法 对称加密算法 非对称加密算法...
备战蓝桥杯【一维前缀和】
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
研报精选230214
目录 【行业230214艾瑞股份】中国增强现实(AR)行业研究报告【行业230214国信证券】信息安全深度剖析5:密评和信创双催化,密码产业开启从1到N【行业230214民生证券】磁性元器件深度报告:乘新能源之风,磁性元…...
【SSL/TLS】准备工作:证书格式
证书格式1. 格式说明1.1 文件编码格式1.2 文件后缀格式2. xca导出格式1. 格式说明 1.1 文件编码格式 1. PEM格式: 使用Base 64 ASCII进行编码的纯文本格式。后缀为“.pem”, ".cer", ".crt", ".key" 2. DER格式 二进制编码格式,文件…...
Linux常用命令---系统常用命令
Linux系统常用命令场景一: 查看当前系统内核版本相关信息场景二: sosreport 命令场景三: 如何定位并确定命令?场景四:查看当前系统运行负载怎场景五: 查看当前系统的内存可用情况场景六:查看网卡…...
C 结构体
C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性ÿ…...
手语检测识别
论文:Real-Time Sign Language Detection using Human Pose Estimation Github:https://github.com/google-research/google-research/tree/master/sign_language_detection SLRTP 2020 手语识别任务包括手语检测(Sign language detection&a…...
android fwk模块之Sensor架构
本文基于Android 12源码整理,包含如下内容: 通信架构应用层实现使用方式SensorManager抽象接口具体实现fwk层的实现native中的SensorManager的初始化流程native中的消息队列初始化与数据读取sensorservice实现HAL层的实现通信架构 应用层实现 涉及代码&…...
安装less-loader5出现webpack版本不兼容
今天遇到一个问题: 安装less-loader5之后其它包提示peerDependencies WARNING,意思是包版本不兼容。 【难题】 虽然NPM已经很自动化了,但依赖问题真的是一个难题,无法自动解决,需要人工干预调整。 【解决办法】 去查…...
Java 网络编程
1.UDP和TCPUDP和TCP是传输层协议中最核心的两种协议他们的特点分别是UDP: 无连接,不可靠传输,面向数据报,全双工TCP: 有连接,是可靠传输,面向字节流,全双工有无连接有连接:就好比两个人打电话,打电话的一方发出连接请求,被打电话的一方选择确认连接,此时双方才能进行通话无连接…...
BEV学习记录
近期可能要经常性的开展BEV工作,打算把自己觉着不错的网站拿出来记录一下。 首先贴上来我还没有细读的一篇觉着不错的文章。 自动驾驶感知新范式——BEV感知经典论文总结和对比(上)_苹果姐的博客-CSDN博客_bev视角 开山之作--LSS ECCV 202…...
Webrtc Native C++切换音频输入源
modules/audio_device/audio_device_impl.cc #include “api/audio_options.h” #include “modules/audio_device/include/factory.h” // 创建一个 AudioDeviceModule 对象 auto audio_device_module = webrtc::AudioDeviceModule::Create( webrtc::AudioDeviceModule::kPl…...
裸辞5个月,面试了37家公司,终于找到理想工作了
上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没想…...
Mybatis-plus@DS实现动态切换数据源应用
目录1 DS实现动态切换数据源原理2 不可在事务中切换数据库分析解决3 原因解析1 DS实现动态切换数据源原理 首先mybatis-plus使用com.baomidou.dynamic.datasource.AbstractRoutingDataSource继承 AbstractDataSource接管数据源;具体实现类为com.baomidou.dynamic.d…...
Go语言开发的MySQL binlog解析利器my2sql:除了闪回,它的统计功能更值得DBA关注
Go语言开发的MySQL binlog解析利器my2sql:统计功能如何重塑DBA工作流 当大多数DBA将my2sql视为又一款闪回工具时,它的统计模块正在悄然改变数据库性能分析的范式。这个用Go语言编写的高效工具,能在90秒内解析1.1GB的binlog文件,其…...
ARM CoreSight通道接口原理与应用实战
1. ARM CoreSight通道接口概述在复杂的多核SoC调试系统中,CoreSight的通道接口(Channel Interface)扮演着神经中枢的角色。这种特殊的通信机制最早出现在ARMv7架构时代,经过多次迭代已成为现代调试体系的核心组件。我曾在多个车载…...
从玩具车到智能家居:用ESP32和NRF24L01搭建低成本多节点传感网实战
从玩具车到智能家居:用ESP32和NRF24L01搭建低成本多节点传感网实战 在智能家居和物联网领域,数据传输的可靠性和成本控制一直是开发者面临的两大挑战。传统Wi-Fi方案虽然普及,但在多节点场景下存在功耗高、网络拥堵等问题;而蓝牙M…...
告别玄学调试:用Python脚本辅助设计UCC25600 LLC反馈环路(附代码)
用Python脚本实现UCC25600 LLC反馈环路的自动化设计与调试 在电源设计领域,LLC谐振变换器因其高效率、低EMI特性而广受欢迎,但反馈环路的设计往往让工程师们头疼不已。传统的手工计算和试错方法不仅耗时费力,还容易因人为因素导致设计偏差。本…...
Zenity实战:用Shell脚本构建轻量级GTK图形界面
1. Zenity入门:Shell脚本的图形化神器 第一次在终端里看到Zenity弹出一个日历对话框时,我正对着黑底白字的命令行界面发呆。原本需要用户输入复杂日期格式的脚本,突然变成了直观的图形化选择,这种转变让我意识到:原来给…...
Python uAgents框架实战:从零构建分布式AI智能体系统
1. 从零开始理解 uAgents:一个 Python 开发者的 AI 智能体框架实战如果你和我一样,对这两年火热的 AI 智能体(AI Agent)概念既兴奋又有点无从下手,觉得那些复杂的框架和理论离实际开发有点远,那么今天聊的这…...
构建文化响应型AI:从算法偏见根源到公平性技术实践
1. 文化响应型AI:为何它不再是“锦上添花”,而是“生存必需”如果你最近用过任何主流的大语言模型或者图像生成工具,试着让它描绘一个“婚礼场景”或者“成功的企业家”,你大概率会得到一个非常“标准”的答案——这个标准&#x…...
3分钟搞定!让Windows拥有macOS同款优雅鼠标指针的完整指南 [特殊字符]️✨
3分钟搞定!让Windows拥有macOS同款优雅鼠标指针的完整指南 🖱️✨ 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.…...
Linux Deadline 调度器的动态参数调整:运行时的参数更新
简介在传统 Linux 调度体系中,CFS 普通进程、SCHED_FIFO/SCHED_RR 实时进程一旦创建,调度优先级、时间片等参数大多只能通过用户态接口静态设置,运行过程中无法动态变更。而SCHED_DEADLINE作为 Linux 内核原生硬实时调度策略,最大…...
CANN/cann-recipes-train:DeepSeek-V3 MXFP8/HiF8低精度预训练优化实践
DeepSeek-V3 MXFP8/HiF8 低精度预训练优化实践样例 【免费下载链接】cann-recipes-train 本项目针对LLM与多模态模型训练业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-train 概述 本样例针对De…...
