​力扣解法汇总1233. 删除子文件夹

news/2024/7/3 1:31:46

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。

如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] 的 子文件夹 。

文件夹的「路径」是由一个或多个按以下格式串联形成的字符串:'/' 后跟一个或者多个小写英文字母。

  • 例如,"/leetcode" 和 "/leetcode/problems" 都是有效的路径,而空字符串和 "/" 不是。

 

示例 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:

输入:folder = ["/a","/a/b/c","/a/b/d"]
输出:["/a"]
解释:文件夹 "/a/b/c" 和 "/a/b/d" 都会被删除,因为它们都是 "/a" 的子文件夹。

示例 3:

输入: folder = ["/a/b/c","/a/b/ca","/a/b/d"]
输出: ["/a/b/c","/a/b/ca","/a/b/d"]

 

提示:

  • 1 <= folder.length <= 4 * 104
  • 2 <= folder[i].length <= 100
  • folder[i] 只包含小写字母和 '/'
  • folder[i] 总是以字符 '/' 起始
  • 每个文件夹名都是 唯一 的

解题思路:

* 解题思路:
* 首先按照文件夹的层级排序,
* 然后遍历文件夹列表,获取每个文件夹对象,逐级遍历查看map中是否存在parent文件夹。
 

代码:

public class Solution1233 {


    public List<String> removeSubfolders(String[] folder) {
        Model1233[] array = new Model1233[folder.length];
        for (int i = 0; i < folder.length; i++) {
            String str = folder[i];
            array[i] = new Model1233(str);
        }
        Arrays.sort(array, Comparator.comparingInt(o -> o.mLength));
        Map<String, Model1233> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < array.length; i++) {
            Model1233 model = array[i];
            StringBuilder builder = new StringBuilder();
            for (int j = 1; j < model.mLength; j++) {
                String key = model.getKey(builder, j);
                if (map.containsKey(key)) {
                    break;
                }
                if (j == model.mLength - 1) {
                    map.put(model.mStr, model);
                    list.add(model.mStr);
                }
            }
        }
        return list;
    }


    static class Model1233 {
        String mStr;
        String[] mSplit;
        int mLength;

        Model1233(String str) {
            this.mStr = str;
            this.mSplit = str.split("/");
            this.mLength = mSplit.length;
        }


        public String getKey(StringBuilder builder, int index) {
            return builder.append("/").append(mSplit[index]).toString();
        }
    }

}


http://lihuaxi.xjx100.cn/news/836926.html

相关文章

仓库种类彼此关系、maven标准目录结构

仓库种类彼此关系 图解 maven标准目录结构 一个完整的项目分为四个部分核心代代码部分 配置文件部分 测试代码部分 测试配置文件普通的项目目录结构项目名src config resourcesmaven项目标准目录结构src/main/java目录 核心代码部分 src/main/resources 配置文件部分 src/test/…

GMAC网卡调试分析

GMAC网卡调试分析 目录GMAC网卡调试分析环境描述MIIMIIRMIIGMIIRGMIISGMIIGMAC网卡信息获取方法获取GMAC网卡信息查看PHY工作接口模式获取PHY IDMAC芯片读写MAC寄存器的方法读MAC寄存器写MAC寄存器MAC环回配置PHY芯片CPU读写phy方法(待更新)mdio读写phy寄存器读phy设备基础信…

Java学习-集合框架-Hashtable、Properties、TreeMap

Java学习-集合框架-Map集合的实现类-Hashtable 线程安全&#xff0c;运行效率慢&#xff0c;不允许 null 作为 key 或者 value 函数&#xff1a; void clear()&#xff1a;清空哈希表 boolean contains()&#xff1a;测试此映射表中是否存在与此指定值关联的键 boolean contai…

沐神AI(NLP部分)

NLP authro&#xff1a;yzzhengdate&#xff1a;2023年02月08日P51-序列模型 序列数据&#xff0c;有时序结构的数据&#xff0c;例如电影的评价随时间变化而变化。音乐、语言、文本和视频都是连续的&#xff0c;标题“狗咬人”和“人咬狗”完全不一样 统计工具 条件建模抽象马…

C语言手写-植物大战僵尸

植物大战僵尸&#xff0c;是一个非常经典的小游戏&#xff0c;初学者从零开始&#xff0c;开发一个自己的植物大战僵尸&#xff0c;还是非常值得期待的&#xff01;可以作为自己的课设&#xff0c;也可以用来快速提升自己的项目开发能力。项目效果&#xff08;详细视频教程点这…

使用Canal实现mysql binlog增量订阅数据

目录 前言 简单原理 1.mysql数据库开启Binlog模式 1.docker 安装 canal 服务端 3.实现canal客户端 前言 是由公司业务改造搜索功能&#xff0c;使用ES搜索引擎中间件&#xff0c;那么我们需要将mysql中的数据同步至ES服务中&#xff0c;最总选择使用alibaba的canal增量订…

PT100温度采集电路设计

PT100是正温度系数的热敏电阻&#xff0c;顾名思义&#xff0c;随着温度的升高&#xff0c;电阻的阻值变大&#xff1b;相反&#xff0c;如果随着温度的升高&#xff0c;电阻的阻值变小&#xff0c;就是负温度系数的热敏电阻。之所以叫做PT100&#xff0c;是因为在0度时其阻值为…

【JavaEE】Java中复杂的Synchronized关键字

目录 一、synchronized的特性 &#xff08;1&#xff09;互斥 &#xff08;2&#xff09;刷新内存 &#xff08;3&#xff09;可重入 二、synchronized的使用 &#xff08;1&#xff09;修饰普通方法 &#xff08;2&#xff09;修饰静态方法 &#xff08;3&#xff09;修…