文章
时间轴
标签
音乐室
友人帐
一刻时光
清单
留言板
相册
算法海洋
关于
Slcpの童话镇 🏰
写文章
1233. 删除子文件夹
中等
Java
数据结构与算法
原题链接
发布日期:
2023年02月08日
文章字数:
5.1k
阅读次数:
492
阅读时长:
0小时0分0秒
## 方法一 ![image-20230208100258492](https://img.slcp.top/image-20230208100258492.png) ### 解题思路 首先通过` 字典 `比较的方式对` 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)。 ## 代码 ```java 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; } } ``` ## 方法二 ![image-20230208100622491](https://img.slcp.top/image-20230208100622491.png) ### 解题思路 排序+字典树 ## 代码 ```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<String> removeSubfolders(String[] folder) { Arrays.sort(folder,(x,y)->(x.length()-y.length())); Trie root = new Trie(); List<String> res = new ArrayList<>(); for(String s:folder){ if(root.add(s)) res.add(s); } return res; } } ``
您阅读这篇文章共耗时:
0小时16分34秒
文章链接:
https://www.slcp.top/article/read/1623147343658557441
版权声明:
本博客所有文章除特別声明外,均采用
CC BY 4.0
许可协议。转载请注明来源
Slcp
!
转载文章以及部分引用均为自己整理记录学习而用,若有侵权,请联系删除。
Java
数据结构与算法
评论
Valine
Gitalk
目录
搜索
首页
前进
后退
刷新
申请友链
在线联系