返回

破茧而出,携手并肩:路飞与您一起挑战LeetCode 1487

前端







## 序言:踏上征程,共攀算法高峰

欢迎各位算法爱好者,跟随路飞的脚步,共同探索LeetCode 1487:保证文件名唯一。这一次,我们将踏上算法进阶之旅,在字符串操作的海洋中扬帆起航,领略编程之美。无论是初出茅庐的新手,还是经验丰富的算法老手,都可以在本指南中找到属于自己的收获。

## 题意解析:LeetCode 1487 难题剖析

LeetCode 1487 是一道经典的字符串操作难题,旨在考验算法工程师的编程技巧与逻辑思维能力。题目要求我们面对一个长度为 n 的字符串数组 names,在文件系统中创建 n 个文件夹。每个文件夹的名称必须唯一,即不能出现重复。

## 算法精粹:Python、JavaScript、Java多语言方案

为了帮助大家更好地理解算法原理,我们将使用Python、JavaScript和Java三种语言,分别提供详细的示例代码。每种语言的代码都经过精心编写,清晰易懂,即使是初学者也能轻松理解。

### Python方案:简洁高效,一览无余

```python
def unique_file_names(names):
  """
  生成一组唯一的文件名。

  参数:
    names:字符串数组,要创建的文件夹名称。

  返回:
    字符串数组,唯一的文件名。
  """

  # 创建一个字典来存储已有的文件名。
  file_names = {}

  # 遍历字符串数组。
  for name in names:
    # 如果文件名已经存在,则在文件名后面添加一个数字。
    if name in file_names:
      i = 1
      while f"{name}({i})" in file_names:
        i += 1
      name = f"{name}({i})"

    # 将文件名添加到字典中。
    file_names[name] = True

  # 返回唯一的文件名。
  return list(file_names.keys())

JavaScript方案:优雅灵动,别具一格

const uniqueFileNames = (names) => {
  // 创建一个集合来存储已有的文件名。
  const fileNames = new Set();

  // 遍历字符串数组。
  for (let name of names) {
    // 如果文件名已经存在,则在文件名后面添加一个数字。
    if (fileNames.has(name)) {
      let i = 1;
      while (fileNames.has(`${name}(${i})`)) {
        i++;
      }
      name = `${name}(${i})`;
    }

    // 将文件名添加到集合中。
    fileNames.add(name);
  }

  // 返回唯一的文件名。
  return Array.from(fileNames);
};

Java方案:严谨稳重,步步为营

import java.util.HashMap;
import java.util.Map;

class Solution {
    /**
     * 生成一组唯一的文件名。
     *
     * @param names 字符串数组,要创建的文件夹名称。
     * @return 字符串数组,唯一的文件名。
     */
    public String[] uniqueFileNames(String[] names) {
        // 创建一个哈希表来存储已有的文件名。
        Map<String, Integer> fileNames = new HashMap<>();

        // 遍历字符串数组。
        for (String name : names) {
            // 如果文件名已经存在,则在文件名后面添加一个数字。
            if (fileNames.containsKey(name)) {
                int i = 1;
                while (fileNames.containsKey(name + "(" + i + ")")) {
                    i++;
                }
                name = name + "(" + i + ")";
            }

            // 将文件名添加到哈希表中。
            fileNames.put(name, 1);
        }

        // 返回唯一的文件名。
        return fileNames.keySet().toArray(new String[0]);
    }
}

结语:算法之旅,永无止境

LeetCode 1487:保证文件名唯一,是一次算法进阶之旅,也是一次字符串操作的实践之旅。希望通过本指南,您能够对算法有更深入的理解,并在未来的编程实践中更加得心应手。算法之旅永无止境,期待我们共同探索更多算法难题,攀登编程高峰。