华为OD机试真题B卷 Java 实现【删除字符串中出现次数最少的字符】,附详细解题思路

在这里插入图片描述

一、题目描述

删除字符串中出现次数最少的字符,如果多个字符出现次数一样则都删除。

二、输入描述

一个字符串。

三、输出描述

删除字符串中出现次数最少的字符,如果多个字符出现次数一样则都删除,如果都被删除 则换为empty。

四、解题思路

  1. 读取输入的字符串;
  2. 将字符串转换为字符数组;
  3. 使用 HashMap 统计每个字符出现的次数,字符作为键,出现次数作为值;
  4. 找出出现次数最少的字符,即最小次数 minTime,使用 Stream 的 min() 方法取得最小值;
  5. 遍历 HashMap,将出现次数等于 minTime 的字符替换为空字符串;
  6. 如果替换后的字符串长度为 0,则将其置为 “empty”;
  7. 输出最终结果。

五、Java算法源码

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String line = scanner.nextLine();
    char[] arr = line.toCharArray();

    // 统计每个字符出现的次数
    Map<Character, Integer> map = new HashMap<Character, Integer>();
    for (char c : arr) {
        if (map.containsKey(c)) {
            map.put(c, map.get(c) + 1);
        } else {
            map.put(c, 1);
        }
    }

    // 最小次数
    int minTime = map.values().stream().min(Integer::compareTo).get();

    // 替换掉出现最小次数的字符
    for (Map.Entry<Character, Integer> entry : map.entrySet()) {
        if (entry.getValue().equals(minTime)) {
            line = line.replaceAll(entry.getKey() + "", "");
        }
    }

    // 输出结果
    if (line.length() == 0) {
        line = "empty";
    }
    System.out.println(line);
}

六、效果展示

1、输入

dftww

2、输出

ww

3、思路

  1. 先找到出现最少的次数;
  2. 然后把出现最小次数的字符从字符串剔除;
  3. 暂无其他更高效的思路;

华为OD机试真题B卷 Java 实现【删除字符串中出现次数最少的字符】,附详细解题思路_第1张图片


本文收录于,华为OD机试2023(Java)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,java,华为od,开发语言,学习)