保证文件名唯一【LC1487】
给你一个长度为n 的字符串数组names
。你将会在文件系统中创建 n
个文件夹:在第 i
分钟,新建名为 names[i]
的文件夹。
由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k)
的形式为新文件夹的文件名添加后缀,其中 k
是能保证文件名唯一的 最小正整数 。
返回长度为 n
的字符串数组,其中 ans[i]
是创建第 i
个文件夹时系统分配给该文件夹的实际名称。
思路:
使用哈希表统计每个文件名出现的次数,如果哈希表中未出现过该文件名,那么不需要添加后缀,将其直接放入哈希表中;如果哈希表中出现过该文件名,那么需要找到不存在与哈希表中的最小后缀k,那么新文件夹的文件名为file=names[i]+ "(" + k + ")",然后在哈希表中更新names[i] 出现的次数和file。
实现
class Solution { public String[] getFolderNames(String[] names) { int n = names.length; Map<String, Integer> map = new HashMap<>(); String[] res = new String[n]; for (int i = 0; i < n; i++){ if (!map.containsKey(names[i])){ map.put(names[i], 1); res[i] = names[i]; }else{ int count = map.get(names[i]); while (map.containsKey(names[i] + "(" + count + ")")){ count++; } String file = names[i] + "(" + count + ")"; res[i] = file; map.put(file, 1); map.put(names[i], count); } } return res; } }