一、题目描述
删除字符串中出现次数最少的字符,如果多个字符出现次数一样则都删除。
二、输入描述
一个字符串。
三、输出描述
删除字符串中出现次数最少的字符,如果多个字符出现次数一样则都删除,如果都被删除 则换为empty。
四、解题思路
- 读取输入的字符串;
- 将字符串转换为字符数组;
- 使用 HashMap 统计每个字符出现的次数,字符作为键,出现次数作为值;
- 找出出现次数最少的字符,即最小次数 minTime,使用 Stream 的 min() 方法取得最小值;
- 遍历 HashMap,将出现次数等于 minTime 的字符替换为空字符串;
- 如果替换后的字符串长度为 0,则将其置为 “empty”;
- 输出最终结果。
五、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、思路
- 先找到出现最少的次数;
- 然后把出现最小次数的字符从字符串剔除;
- 暂无其他更高效的思路;
🏆本文收录于,华为OD机试2023(Java)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。