📜  Java中独特的Windows目录程序

📅  最后修改于: 2022-05-13 01:55:35.950000             🧑  作者: Mango

Java中独特的Windows目录程序

在 Windows 文件系统中,两个文件夹/文件不能具有相同的名称。如果输入以前使用过的文件夹名称,系统会在其名称后加一个后缀,形式为 (k),其中,k 是最小的正整数,使得获得的名称保持唯一。

问题陈述

给定一个大小为 n 的字符串数组 d irNames 。您将在 Windows 文件系统中创建 n 个文件夹,以便在第 i 分钟创建一个名为 dirNames[i] 的文件夹。任务是返回一个长度为 n 的字符串数组,其中 ans[i] 是系统在创建第 i 个文件夹时为其分配的实际名称。

例子:

Input: dirNames = ["abc","pqrs","mnp","abc(2019)"]
Output: ["abc","pqrs","mnp","abc(2019)"]

说明:让我们看看文件系统如何创建文件夹名称:
“abc” –> 之前没有分配,仍然是“abc”
“pqrs” -> 之前没有分配,仍然是“pqrs”
“mnp” -> 之前没有分配,仍然是“mnp”
“abc(2019)” –> 之前未分配,仍然是“abc(2019)”

Input: dirNames = ["cod","cod(1)","cod","test"]
Output: ["cod","cod(1)","cod(2)","test"]

说明:让我们看看文件系统如何创建文件夹名称:
“cod” –> 之前未分配,仍然是“cod”
“cod(1)” –> 之前未分配,仍然是“cod(1)”
“cod” –> 保留名称,系统添加(k),因为“cod(1)”也保留,系统将k = 2。它变成“cod(2)”
“test” -> 之前没有分配,仍然是“test”

解决方案

我们将维护一个映射来存储特定名称是否已经出现了多少次。然后反复检查名称是否已经出现并且它是否包含括号中的数字。然后增加数字直到不存在。同时,也要更新地图。

Java
import java.io.*;
import java.util.*;
  
public class GFG {
    // Main Method
    public static void main(String[] args)
        throws IOException
    {
        String[] dirNames
            = { "cod", "cod(1)", "cod", "test" };
  
        String[] output = getFolderNames(dirNames);
        for (String i : output) {
            System.out.print(i + " ");
        }
    }
  
    public static String[] getFolderNames(String[] names)
    {
        Map m = new HashMap<>();
        for (int i = 0; i < names.length;
             m.put(names[i], 1), i++)
            if (m.containsKey(names[i])) {
                int k = m.get(names[i]);
                while (
                    m.containsKey(names[i] + "(" + k + ")"))
                    k++;
                m.put(names[i], k + 1);
                names[i] = names[i] + "(" + k + ")";
            }
        return names;
    }
}


输出:

cod cod(1) cod(2) test
  • 时间复杂度:O(n)
  • 空间复杂度:O(n 2 )