G
N
I
D
A
O
L
题目链接:https://leetcode.cn/problems/making-file-names-unique/

# 解题思路

哈希表:存储当前新名字的下一个数字 k;从左至右依次遍历 names,如果当前 name:

  • 不存在于哈希表中,该名字就是合理的,同时更新哈希表中 name 的 k 为 1
  • 存在,则一直递增 k,直到 name + "(" + k + ")" 不存在,此时,需要存储 name 的下一个数字为 k+1,且新名字也要存于哈希表,即下一个数为 1

# 提交结果

image.png

# 代码

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 + ")";
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝