前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1233. 删除子文件夹

1233. 删除子文件夹

作者头像
小炜同学
发布2023-02-23 09:11:52
6830
发布2023-02-23 09:11:52
举报
文章被收录于专栏:Java领域客栈

方法一

image-20230208100258492
image-20230208100258492

解题思路

首先通过字典比较的方式对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
复制
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
image-20230208100622491

解题思路

排序+字典树

代码

```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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一
    • 解题思路
    • 代码
    • 方法二
      • 解题思路
      • 代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档