使用Python创建唯一文件名的程序
假设我们有一个名为names的包含n个字符串的数组。我们必须在文件系统中创建n个目录,使得在第i分钟时,我们将创建一个名为names [i]的目录。如果两个文件具有相同的名称,则不能具有相同的名称,如果输入重复的目录名称,则系统将在其名称的形式下添加后缀,例如(k),这里,k是最小的正整数,使得得到的名称保持唯一。我们必须找到一个长度为n的字符串数组,其中ans [i]是当我们创建它时将分配给第i个目录的实际名称。
因此,如果输入为names = [“my_dir”,“my_dir(1)”“my_new_dir”“my_new_dir”“abc”],则输出将为[‘my_dir’, ‘my_dir(1)’, ‘my_new_dir’, ‘my_new_dir(1)’, ‘abc’] ,因为“my_new_dir”已经存在一次,那么第一个加上了1。
要解决此问题,我们将按以下步骤操作−
- dic:一个新的映射,如果某个键不存在,则返回0
-
res:一个新的列表
-
对于names中的每个名称,执行以下操作:
- 如果名称不在dic中,则执行以下操作:
- dic [name]:=dic [name] + 1
-
在res的末尾插入名称
-
否则,执行以下操作:
- newname:=name concatenate ‘(‘ concatenate dic [name] concatenate ‘)’
-
当newname存在于dic中时,执行以下操作:
-
dic [name]:=dic [name] + 1
-
newname:=name concatenate ‘(‘ concatenate dic [name] concatenate ‘)’
-
dic [newname]:=1
-
在res的末尾插入newname
- 如果名称不在dic中,则执行以下操作:
-
返回res
让我们看看以下实现以获得更好的理解 −
示例
from collections import defaultdict
def solve(names):
dic = defaultdict(int)
res = []
for name in names:
if name not in dic:
dic[name] += 1
res.append(name)
else:
newname = name +'(' + str(dic[name]) + ')'
while newname in dic:
dic[name] += 1
newname = name +'(' + str(dic[name]) + ')'
dic[newname] = 1
res.append(newname)
return res
names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))
输入
["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
输出
“`python
[‘my_dir’, ‘my_dir(1)’, ‘my_new_dir’, ‘my_new_dir(1)’, ‘abc’]