Leetcode 1487. 保证文件名唯一

2025/04/12

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)"
# 迭代每个文件名过程中,记录每个文件名下一个新副本的后缀序号
# 如果一个文件名没有出现过,则记录到哈希表中,出现次数为1,下一次副本的后缀也是从(1)开始
# 否则,从id=mp[name]开始,依次查看name(id) name(id+1) ... 是否出现过,同时更新name出现的次数,直到找到一个新文件名
class Solution:
    def getFolderNames(self, names: List[str]) -> List[str]:
        # 保存每个文件名出现的次数
        res,mp=[],{}
        for x in names:
            s=x
            # 不断生成新副本,直到找到一个新文件名 kaido(1) kaido(2) kaido(3) ...
            while s in mp:
                # 根据 出现文件的副本序号mp[x],生成新文件名
                s=f'{x}({mp[x]})'
                # 当前文件出现次数+1
                mp[x]+=1
            mp[s]=1
            res.append(s)
        return res

Post Directory