牛客华为算法-HJ23 删除字符串中出现次数最少的字符

我爱海鲸 2025-04-23 18:00:04 暂无标签

简介华为OD

删除字符串中出现次数最少的字符_牛客题霸_牛客网

描述

对于给定的仅由小写字母构成的字符串,删除字符串中出现次数最少的字符。输出删除后的字符串,字符串中其它字符保持原来的顺序。
特别地,若有多个字符出现的次数都最少,则把这些字符都删除。

输入描述:

在一行上输入一个长度为 1≦length(s)≦20 ,仅由小写字母构成的字符串 s ,代表待处理的字符串。

输出描述:

在一行上输出一个字符串,代表删除后的答案。保证这个字符串至少包含一个字符。
解法一(java):
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }
        String str = in.nextLine();
        int len = str.length();
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0 ; i < len ; i++) {
            int key = str.charAt(i);
            if (map.containsKey(key)) {
                map.put(key, map.get(key) + 1);
            } else {
                map.put(key, 1);
            }
        }

        Set<Integer> keys = new HashSet<>();

        Integer value = 21;

        for (Integer k : map.keySet()) {
            Integer v = map.get(k);
            if (value > v) {
                value = v;
            }
        }

        for (Integer k : map.keySet()) {
            Integer v = map.get(k);
            if (value == v) {
                keys.add(k);
            }
        }

        String result = str;

        for (int key : keys) {
            char replace = (char)key;

            result = result.replaceAll(String.valueOf(replace), "");
        }

        System.out.println(result);
    }
}

思路:遍历,通过一个map保存出现字符的数量,然后找出map中出现次数最少的键,然后通过字符串替换的方式删除对应的字符即可。

你好:我的2025