Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法……感兴趣就关注我吧!你定不会失望。
个人主页:主页链接
算法专栏:专栏链接
我会一直往里填充内容哒!
LeetCode专栏:专栏链接
目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出
代码仓库:Gitee链接
点击关注=收获更多优质内容
考试、项目周终于结束了啊!!!!接下来我会好好更文,准备今年四月蓝桥杯省赛!
这道题并不难,写这篇题解的目的在于,复习一下部分stl库。
题目:
给你一个长度为
n
的字符串数组names
。你将会在文件系统中创建n
个文件夹:在第i
分钟,新建名为names[i]
的文件夹。由于两个文件不能共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以
(k)
的形式为新文件夹的文件名添加后缀,其中k
是能保证文件名唯一的最小正整数。返回长度为
n
的字符串数组,其中ans[i]
是创建第i
个文件夹时系统分配给该文件夹的实际名称。输入:names = ["pes","fifa","gta","pes(2019)"]输出:["pes","fifa","gta","pes(2019)"]解释:文件系统将会这样创建文件名:"pes" /> 之前未分配,仍为 "pes""fifa" --> 之前未分配,仍为 "fifa""gta" --> 之前未分配,仍为 "gta""pes(2019)" --> 之前未分配,仍为 "pes(2019)"输入: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"输入:names = ["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece"]输出:["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece(4)"]解释:当创建最后一个文件夹时,最小的正有效 k 为 4 ,文件名变为 "onepiece(4)"。
白话讲解:
非常的简单,题目给定一串名字,要做的就是若没有重复的名字,则直接输出,若有,则加入后缀(1)、(2)…..直到不重复后输出,但没有双重后缀,例如:a(1).txt重复,则输出a(2).txt而不是a(1)(1).txt.
题解:
不重复则..重复则…,这样一看就很容易想到用hash来做,而我们用unordered_map来做,相比于map,他索引效率更高.
首先定义格式函数,输出规定的字符格式,to_string(k)是将k转成字符表达.
之后遍历题给数组names.每遍历一次,就将其hash值加1,若hash值为1,则说明其是第一次出现,可以直接放到答案容器中.
若不为1,则搜寻hash中此时已经出现了多少次.若已经出现3次:a a(1) a(2),则传入2(为什么要传入k-1呢?因为假设gta gta出现了两次 第二个gta应该命名为gta(1),而不是gta(2))
到格式函数中,判断其返回值在hash中是否出现过,若没出现过则存入答案数组,存入map中
若出现过则继续重复上述步骤.
代码实现:
#include#include#include#includeusing namespace std;class Solution { public: string to(string a,int k) {return a+='('+to_string(k)+')';} vector getFolderNames(vector& names) { unordered_mapmap; vectorans; for(const auto &name:names) { map[name]++; if(map[name]==1) { ans.push_back(name); } else { int k=map[name]; while(map[to(name, k-1)]) { k++; } ans.push_back(to(name,k-1)); map[to(name,k-1)]++; } } return ans; } };
完结撒花:
本篇博客的内容【Leetcode每日一题 1487. 保证文件名唯一】已经结束。
若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。
若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。
诸君,山顶见!