【LeetCode】1487. 保证文件名唯一

news2024/11/26 18:26:09

1487. 保证文件名唯一

题目描述

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。

由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。

返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。


示例 1

输入:names = [“pes”,“fifa”,“gta”,“pes(2019)”]
输出:[“pes”,“fifa”,“gta”,“pes(2019)”]
解释:文件系统将会这样创建文件名:
“pes” --> 之前未分配,仍为 “pes”
“fifa” --> 之前未分配,仍为 “fifa”
“gta” --> 之前未分配,仍为 “gta”
“pes(2019)” --> 之前未分配,仍为 “pes(2019)”


示例 2

输入:names = [“gta”,“gta(1)”,“gta”,“avalon”]
输出:[“gta”,“gta(1)”,“gta(2)”,“avalon”]
解释:文件系统将会这样创建文件名:
“gta” --> 之前未分配,仍为 “gta”
“gta(1)” --> 之前未分配,仍为 “gta(1)”
“gta” --> 文件名被占用,系统为该名称添加后缀 (k),由于 “gta(1)” 也被占用,所以 k = 2 。实际创建的文件名为 “gta(2)” 。
“avalon” --> 之前未分配,仍为 “avalon”


示例 3

输入:names = [“onepiece”,“onepiece(1)”,“onepiece(2)”,“onepiece(3)”,“onepiece”]
输出:[“onepiece”,“onepiece(1)”,“onepiece(2)”,“onepiece(3)”,“onepiece(4)”]
解释:当创建最后一个文件夹时,最小的正有效 k 为 4 ,文件名变为 “onepiece(4)”。


示例 4

输入:names = [“wano”,“wano”,“wano”,“wano”]
输出:[“wano”,“wano(1)”,“wano(2)”,“wano(3)”]
解释:每次创建文件夹 “wano” 时,只需增加后缀中 k 的值即可。


示例 5

输入:names = [“kaido”,“kaido(1)”,“kaido”,“kaido(1)”]
输出:[“kaido”,“kaido(1)”,“kaido(2)”,“kaido(1)(1)”]
解释:注意,如果含后缀文件名被占用,那么系统也会按规则在名称后添加新的后缀 (k) 。


提示

1 <= names.length <= 5 * 104
1 <= names[i].length <= 20
names[i] 由小写英文字母、数字和/或圆括号组成


算法一:哈希映射

思路

  • 对于需要创建的文件名 name ,如果文件系统中不存在名为 name 的文件夹,那么直接创建即可,否则我们需要从 k = 1 开始,尝试使用添加后缀 k 的新文件名创建新文件夹。
  • 使用哈希映射 index 记录已经创建的文件夹的下一后缀序号,遍历 names 数组,记录当前遍历的文件名 name :
    • 如果 name 不在哈希表中,那么说明文件系统不存在名为 name 的文件夹,直接创建该文件夹,并记录对应文件夹的下一后缀序号为 1;
    • 如果 name 在哈希表中, 那么说明文件系统已经存在名为 name 的文件夹, 我们在哈希表找到 name 的下一后缀序号 k ,逐一尝试直到添加后缀 k 的新文件名不在哈希表中 ,然后创建该文件夹。需要注意的是, 创建该文件夹后,有两个文件名的下一后缀序号需要修改,首先文件名 name 的下一后缀序号为 k+1 ,其次,文件名 name 添加后缀 k 的新文件名的下一后缀序号为 1 。

收获

  • 思路总体上差不多,但是一直卡在文件名的命名上,要使用 to_string(k) ,我没有正确使用。

  • 另外,while(mp[name + "(" + to_string(k) + ")"]) ,这个判断我也没有想到。我一开始是打算建立 unordered_map<string, vector<int>> mp ,一个 string 对应一个数组,比如文件名 ‘aa(2019)’ ,就存入 mp[“aa”] = [2019] ,但是这样太麻烦了,也不容易实现。

    题解的做法就实现了文件名 name 的依次遍历,方便了很多。

算法情况

  • 时间复杂度:O(L),其中 L 为数组 names 中所有文件名的长度之和;
  • 空间复杂度:O(L),其中 L 为数组 names 中所有文件名的长度之和。
    在这里插入图片描述

代码

class Solution {
public:
    vector<string> getFolderNames(vector<string>& names) {
        vector<string> ans;
        unordered_map<string, int> mp;
        for(auto &name : names){
            if(mp[name]){
                // 说明文件夹已经存在
                int k = mp[name];
                while(mp[name + "(" + to_string(k) + ")"]){
                    k ++;
                }
                mp[name] = k;
                name = name + "(" + to_string(k) + ")";
            }
            mp[name] = 1;
            ans.push_back(name);
        }
        return ans;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch-模型训练中过拟合和欠拟合问题。从模型复杂度和数据集大小排查问题

评价了机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数&#xff0c;你也许发现了&#xff1a;当模型在训练数据集上更准确时&#xff0c;它在测试数据集上却不一定更准确。这是为什么呢&#xff1f; 训练误差和泛化误差 在解释上述现象…

常用Swagger注解汇总

常用Swagger注解汇总 前言 在实际编写后端代码的过程中&#xff0c;我们可能经常使用到 swagger 注解&#xff0c;但是会用不代表了解&#xff0c;你知道每个注解都有什么属性吗&#xff1f;你都用过这些属性吗&#xff1f;了解它们的作用吗&#xff1f;本文在此带大家总结一下…

6-2 SpringCloud快速开发入门:声明式服务消费 Feign实现消费者

声明式服务消费 Feign实现消费者 使用 Feign实现消费者&#xff0c;我们通过下面步骤进行&#xff1a; 第一步&#xff1a;创建普通 Spring Boot工程 第二步&#xff1a;添加依赖 <dependencies><!--SpringCloud 集成 eureka 客户端的起步依赖--><dependency>…

图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径

一、题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。 二、示例 2.1> 示例 1&#xff1a; 【输入】root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…

从 ChatGPT 爆火回溯 NLP 技术

ChatGPT 火遍了全网&#xff0c;多个话题频频登上热搜。见证了自然语言处理&#xff08;NLP&#xff09;技术的重大突破&#xff0c;体验到通用技术的无限魅力。GPT 模型是一种 NLP 模型&#xff0c;使用多层变换器&#xff08;Transformer&#xff09;来预测下一个单词的概率分…

cuda编程以及GPU基本知识

目录CPU与GPU的基本知识CPU特点GPU特点GPU vs. CPU什么样的问题适合GPU&#xff1f;GPU编程CUDA编程并行计算的整体流程CUDA编程术语&#xff1a;硬件CUDA编程术语&#xff1a;内存模型CUDA编程术语&#xff1a;软件线程块&#xff08;Thread Block&#xff09;网格&#xff08…

新界面Moonbeam DApp上线,替你先尝试了一番!

作者&#xff1a;充电中的小恐龙 请注意&#xff0c;本篇内容来自Moonbeam社区成员的无偿分享&#xff0c;与Moonbeam官方和Moonbeam中文社区无关。本文内容仅供参考&#xff0c;对于内容的准确性和实效性&#xff0c;请自行谨慎判断。 本文撰写于DApp上线Beta版本之时&#…

数据库开发(一文概括mysql基本知识)

Mysql 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 关系型数据库(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。mysql在问开发中&#xff0c;几乎必不可少&#xff0c;因为其他的可能是要收费的&#x…

【运维】Linux定时任务 定时执行脚本

【运维】Linux定时任务 定时执行脚本 在安装完成操作系统后&#xff0c;默认会安装 crond 服务工具&#xff0c;且 crond 服务默认就是自启动的。crond 进程每分钟会定期检查是否有要执行的任务&#xff0c;如果有&#xff0c;则会自动执行该任务。 五分钟执行一次sh脚本 进入编…

taobao.item.update.delisting( 商品下架 )

&#xffe5;开放平台基础API必须用户授权 单个商品下架输入的num_iid必须属于当前会话用户 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 点击获取key和secret 请求参数 响应参数 请求示例 TaobaoClient client new …

6-3 SpringCloud快速开发入门: Feign实现负载均衡的服务消费

Feign实现负载均衡的服务消费 负载均衡&#xff1a;Spring Cloud 提供了 Ribbon来实现负载均衡&#xff0c;使用 Ribbo直接注入一个 RestTemplate对象即可&#xff0c;RestTemplate已经做好了负载均衡的配置&#xff1b; 在 Spring Cloud下&#xff0c;使用 Feign也是直接可以实…

实时的软件生成 —— Prompt 编程打通低代码的最后一公里?

PS&#xff1a;这也是一篇畅想&#xff0c;虽然经过了一番试验&#xff0c;依旧有一些不足&#xff0c;但是大体上站得住脚。传统的软件生成方式需要程序员编写大量的代码&#xff0c;然后进行测试、发布等一系列繁琐的流程。而实时生成技术则是借助人工智能技术&#xff0c;让…

在CANoe/CANalyzer中观察CAN Message报文的周期Cycle

案例背景&#xff1a; 该篇博文将告诉您&#xff0c;如何直观的&#xff0c;图示化的&#xff0c;查看CAN网络中各CAN Message报文的周期变化。 优质博文推荐阅读&#xff08;单击下方链接&#xff0c;即可跳转&#xff09;&#xff1a; Vector工具链 CAN Matrix DBC CAN M…

市场份额下降,股价暴跌,金山云要想实现盈利还需要更长的时间

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 IPO后股价表现与估值变化 金山云&#xff08;KC&#xff09;于2020年5月在纳斯达克进行了IPO上市&#xff0c;当时IPO价格为17美元。根据S&P Capital IQ的数据&#xff0c;截至2020年6月1日&#xff0c;金山云的股价已…

linux基本功系列之uname实战

文章目录前言一. uname命令介绍二. 语法格式及常用选项三. 参考案例3.1 输出全部信息3.2 输出内核名称及版本3.3 输出网络节点的主机名3.4 输出主机硬件架构3.5 输出操作系统名称3.6 显示版本信息总结前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文…

深度学习-【语义分割】学习笔记4 膨胀卷积(Dilated convolution)

文章目录膨胀卷积为什么需要膨胀卷积gridding effect连续使用三次膨胀卷积——1连续使用三次膨胀卷积——2连续使用三次膨胀卷积——3Understanding Convolution for Semantic Segmentation膨胀卷积 膨胀卷积&#xff0c;又叫空洞卷积。 左边是普通卷积&#xff0c;右边是膨胀…

python的多线程编程之锁

1、 背景概述 在上篇文章中&#xff0c;主要讲述了python中的socket编程的一些基本方面&#xff0c;但是缺少关于锁的相关概念&#xff0c;从而在这篇文章中进行补充。 由于在python中&#xff0c;存在了GIL&#xff0c;也就是全局解释器锁&#xff0c;从而在每次进行获得cpu的…

网络通信--Linux

文章目录网络通信的基础通信模型IP地址和端口port网络套接字网络字节序初识UDP与TCP两种协议sockaddr结构体家族认识一些网络常用基础函数UDP实现简单通信TCP实现简单通信总结网络通信的基础 网络通信是建立在多层协议之下&#xff0c;最终利用数据传输线路进行数据通信。首先…

Web Spider案例 网洛克 第三题 AAEncode加密 练习(七)

声明 此次案例只为学习交流使用&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;切勿用于其他非法用途&#xff1b; 文章目录声明一、资源推荐二、逆向目标三、抓包分析 & 下断分析逆向3.1 抓包分析3.2 下断分析逆向拿到混淆JS代码3.3 AAEncode解决方…

【强烈建议收藏:MySQL面试必问系列之SQL语句执行专题】

一.知识回顾 之前的文章我们一起学习了MySQL面试必问系列之事务专题、锁专题&#xff0c;没有学习的小伙伴可以直接通过该链接地址直接访问&#xff0c;MYSQL你真的了解吗专栏的文章&#xff0c;接下来我们就一起来学习一下MySQL中SQL语句的执行流程&#xff0c;看看你掌握的怎…