使用 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 := 一个新列表

  • 对于名字中的每个名字,做

    • newname := name concatenate '(' concatenate dic[name] concatenate ')'

    • 当 dic 中存在 newname 时,请执行

    • dic[新名称] := 1

    • 在 res 末尾插入 newname

    • dic[名称] := dic[名称] + 1

    • newname := name concatenate '(' concatenate dic[name] concatenate ')'

    • dic[名称] := dic[名称] + 1

    • 在 res 末尾插入名称

    • 如果名称不在 dic 中,则

    • 否则,

    • 返回资源

    让我们看看以下实现以获得更好的理解 -

    示例

    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']

    猜你喜欢