Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >1233. 删除子文件夹

1233. 删除子文件夹

作者头像
小炜同学
发布于 2023-02-23 01:11:52
发布于 2023-02-23 01:11:52
76400
代码可运行
举报
文章被收录于专栏:Java领域客栈Java领域客栈
运行总次数:0
代码可运行

方法一

解题思路

首先通过字典比较的方式对folder进行排序。由此可知,只有每两个相邻的字符串之间存在子目录情况。因此,folder[i]folder[i-1]之间满足在值前缀相等并且folder[i-1]folder[i].length()下标的值为' / '的前提下,那么folder[i-1]folder[i]的子目录。

复杂度分析 时间复杂度:O(nl⋅logn)。n为文件夹数量,l为文件夹长度,O(nl⋅logn)为排序所消耗的时间。 空间复杂度:O(l)。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public List<String> removeSubfolders(String[] folder) {
        Arrays.sort(folder);
        ArrayList<String> list = new ArrayList<String>();
        list.add(folder[0]);
        for(int i = 1; i < folder.length; i++) {
            int pre = list.get(list.size()-1).length();
            if(!(pre < folder[i].length()&& list.get(list.size()-1).equals(folder[i].substring(0,pre))  && folder[i].charAt(pre) == '/' )) {
               list.add(folder[i]);
            }   
            
        }
        return list;
    }
}

方法二

解题思路

排序+字典树

代码

```java class Solution { class Trie{ Trie[] chid = new Trie[76]; boolean end; boolean add(String s){ Trie root = this; for(char c:s.toCharArray()){ if(c=='/'&&root.end){ return false; } if(root.chid[c-'/']==null){ root.chid[c-'/'] = new Trie(); } root = root.chid[c-'/']; } root.end = true; return true; } } public List removeSubfolders(String[] folder) { Arrays.sort(folder,(x,y)->(x.length()-y.length())); Trie root = new Trie(); List res = new ArrayList<>(); for(String s:folder){ if(root.add(s)) res.add(s); } return res; } } ``

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年02月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指offer(25-30)题解
剑指offer(25-30)题解 25题解--复杂链表的复制 26题解--二叉搜索树与双向链表 27题解--字符串的排列 28题解--数组中出现次数超过一半的数字 29题解--最小的K个数 30题解--连续子数组的最大和 25题解–复杂链表的复制 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路解析
萌萌哒的瓤瓤
2020/08/26
3440
剑指offer(25-30)题解
No.015 3Sum
15. 3Sum Total Accepted: 131800 Total Submissions: 675028 Difficulty: Medium   Given an array S of n
mukekeheart
2018/02/27
6330
剑指Offer LeetCode 面试题59 - I. 滑动窗口的最大
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释:
手撕代码八百里
2020/07/28
3370
Leetcode题解——849/950
我们将有人的座位的下标记录到一个list中,剩下的事情就是要找一个点,距离list中某个元素的最大距离
出其东门
2019/08/06
3490
剑指offer(41-50)题解
既然有了通项公式,那么其实我们也能推出这样一个结论,sum如果在n区间长的连续区间内满足,那么这个n区间长的区间是唯一的,不会存在第二个n长的连续区间满足,从上图我们可以看出。 其次假设刚好区间满足情况,那么区间的元素数是不是只有奇数个和偶数个这两种情况。
萌萌哒的瓤瓤
2020/08/26
4780
剑指offer(41-50)题解
剑指offer(61-67)题解
例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的函数来解析回这个二叉树
萌萌哒的瓤瓤
2020/08/26
3030
剑指offer(61-67)题解
『LeetCode』#6刷题日记
前言 📢 本日记为个人的刷题学习日记,内容非原创,仅为自己复习知识时,能够看得懂自己写的CV的代码,快速理解题意。另外,👍力扣官方的题解很好用,三叶姐🍭nb!!!!! 448 找到数组中消失的数字📝 题意 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 输入: nums = [4, 3, 2, 7, 8, 2, 3, 1] 输出: [5, 6] 思路 暴力统计已有
客怎眠qvq
2022/11/01
2260
『LeetCode』#6刷题日记
LeetCode133|合并区间
先对数组进行排序,然后进行逻辑判断,这里使用了集合作为一个临时存储空间,比较相邻区间的内容,如前一个区间右端点的值和下一个区间左端点的值做比较,符合合并的时候进行合并之后放入结果集,不符合合并的也放入结果集中,当所有的区间都处理完成之后,符合合并的数据就处理完成了,这也是本题的主要思路
码农王同学
2020/11/16
3220
链表问题
A stringSof lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.
大学里的混子
2019/03/01
4820
图解LeetCode——1233. 删除子文件夹(难道:中等)
你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。
爪哇缪斯
2023/05/10
2240
图解LeetCode——1233. 删除子文件夹(难道:中等)
LeetCode 350: 两个数组的交集 II Intersection of Two Arrays II
Given two arrays, write a function to compute their intersection.
爱写bug
2019/10/30
4530
【面试高频系列】Top K 问题的多种解法:冒泡排序 & 快速排序 & 优先队列 ...
这是 LeetCode 上的「703. 数据流中的第 K 大元素」,难度为 「Easy」。
宫水三叶的刷题日记
2021/04/08
8350
回溯总结
子集问题最重要的就是考虑树枝去重和树层去重了,其实这种去重只需要一个数组就可以解决(在顺序的情况下)下面看一下子集问题
用户10136162
2022/12/02
5830
【算法】每日一题——奇怪的算法(2)
1:这道题第一个关键点在于,按照左端点进行升序排序(这里用到了lambda表达式,实现comparator接口)
三三是该溜子
2025/02/18
330
【算法】每日一题——奇怪的算法(2)
剑指offer题目汇总_朝花夕拾题目及答案填空题
>> : 右移运算符,num >> 1,相当于num除以2
全栈程序员站长
2022/11/09
9150
LeetCode100|两个数组的交集II
这是自己目前输出的leetcode第100篇题解慢一点,才能更快,98道leetcode,也是自己坚持过程中一个结果,感谢周围的人和自己,这里道一句谢谢吧,没有什么好像说的,坚持输出自己想输出的内容就可以了。
码农王同学
2020/10/27
5250
数据结构与算法思想
分治法是基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
知一
2021/12/07
4330
数据结构与算法思想
LintCode 子集题目代码
题目 给出一个具有重复数字的列表,找出列表所有不同的排列。 样例 给出列表 [1,2,2],不同的排列有: Paste_Image.png 代码 class Solution { /**
desperate633
2018/08/22
2760
LintCode 子集题目代码
力扣刷题篇——排序
目录  1287.题目描述🍔: 解题思路🍖:  代码附上🍳:  1464 题目描述🥖  解题思路: 代码附上:  1636 题目描述📌: 解题思路🎀:  代码附上: 436 题目描述🎐  解题思路🍜:  代码附上🦪  1287.题目描述🍔: 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 解题思路🍖:  方法1: 注意看题目要求
王同学要努力
2022/12/20
2820
力扣刷题篇——排序
String忽略大小写方法compareToIgnoreCase源码及Comparator自定义比较器
String忽略大小写方法compareToIgnoreCase源码及Comparator自定义比较器
oktokeep
2024/10/09
750
相关推荐
剑指offer(25-30)题解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验