使用HashMap检测列表重复项并为重复元素追加计数后缀的实现问题
问题原因
你当前代码存在两处错误导致无法正确统计重复次数:
- HashMap存储的是元素首次出现的下标,没有同步更新重复出现的次数,无法记录元素累计出现的次数
- 拼接后缀时固定写死了"1",没有动态调用统计到的重复次数
修正后的实现代码
public static List<String> duplicates(List<String> given) { List<String> result = new ArrayList<>(); HashMap<String, Integer> countMap = new HashMap<>(); for (String current : given) { if (countMap.containsKey(current)) { // 取出当前累计的重复次数作为后缀 int count = countMap.get(current); result.add(current + count); // 次数自增,为下一次重复做准备 countMap.put(current, count + 1); } else { // 首次出现时存入初始次数1,下次出现时后缀即为1 countMap.put(current, 1); result.add(current); } } return result; }
效果验证
用你给出的示例测试:
输入:["mixer", "toaster", "mixer", "mixer", "bowl"]
执行逻辑:
- 首次遇到mixer:存入countMap值为1,输出mixer
- 首次遇到toaster:存入countMap值为1,输出toaster
- 第二次遇到mixer:取到存储值1,输出mixer1,更新countMap值为2
- 第三次遇到mixer:取到存储值2,输出mixer2,更新countMap值为3
- 首次遇到bowl:存入countMap值为1,输出bowl
最终输出和预期完全一致:["mixer", "toaster", "mixer1", "mixer2", "bowl"]
内容的提问来源于stack exchange,提问作者sara
相关产品推荐
相关产品推荐

