使用 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 连接 '(' 连接 dic[name] 连接 ')'

      • 当 newname 存在于 dic 中时,执行以下操作:

        • dic[name] := dic[name] + 1

        • newname := name 连接 '(' 连接 dic[name] 连接 ')'

      • dic[newname] := 1

      • 将 newname 插入 res 的末尾

  • 返回 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"]

输出

['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']

更新于: 2021年5月29日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告