题目链接:https://leetcode.cn/problems/making-file-names-unique/
# 解题思路
哈希表:存储当前新名字的下一个数字 k;从左至右依次遍历 names,如果当前 name:
- 不存在于哈希表中,该名字就是合理的,同时更新哈希表中 name 的 k 为 1
- 存在,则一直递增 k,直到
name + "(" + k + ")"
不存在,此时,需要存储 name 的下一个数字为 k+1,且新名字也要存于哈希表,即下一个数为 1
# 提交结果
# 代码
class Solution { | |
public String[] getFolderNames(String[] names) { | |
// 存储当前 name 的下一个数字 k | |
Map<String, Integer> indexMap = new HashMap<>(); | |
for (int i = 0; i < names.length; ++i) { | |
int k = indexMap.getOrDefault(names[i], 0); | |
if (k == 0) { | |
indexMap.put(names[i], 1); | |
continue; | |
} | |
// 包含 | |
String newName; | |
while (indexMap.containsKey((newName = suffix(names[i], k)))) { | |
++k; | |
} | |
// 当前文件的新名字为 xxx (k) | |
// 以前的名字的下标要往后移一个,即 k+1 | |
indexMap.put(names[i], k + 1); | |
// 新名字也要放入 map,并更新下一个数字为 1 | |
indexMap.put(newName, 1); | |
names[i] = newName; | |
} | |
return names; | |
} | |
private String suffix(String name, int k) { | |
return name + "(" + k + ")"; | |
} | |
} |