题解 | #字符个数统计#

删除字符串中出现次数最少的字符

http://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9

import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String s = scanner.nextLine();
            char[] chars = s.toCharArray();
            //统计每个字母的数量
            HashMap<Character, Integer> map = new HashMap<>();
            for (char aChar : chars) {
                map.put(aChar, (map.getOrDefault(aChar, 0) + 1));
            }
            //找到数量最少的字符数量
            Collection<Integer> values = map.values();
            Integer min = Collections.min(values);

            //用空字符串替换该字母
            for (Character character : map.keySet()) {
                if (map.get(character) == min){
                    s = s.replaceAll(String.valueOf(character), "");
                }
            }
            System.out.println(s);
        }
    }
}
全部评论
导包少了一行import java.util.Collection;哈哈
点赞 回复 分享
发布于 2022-06-29 17:20
用LinkedHashMap也可以,LinkedHashMap能保证插入顺序
3 回复 分享
发布于 2023-02-09 22:36 广东
优雅,思路一样不过一想到统计每个字母数量要去重就想起set了,我拿treeset做的后面遍历了好几遍,还要转数组才好在遍历的时候取值赋值,写的累死了,果然这题还是用hashmap好
2 回复 分享
发布于 2022-10-24 16:59 广东
map不是无序的吗2 怎么保证原来顺序的
1 回复 分享
发布于 2022-09-22 20:38 北京
这样怎么保证题干中的“这个字符串至少包含一个字符”这个要求? 比如aaabbb,都是3,会不会在Integer min = Collections.min(values); 得到3,然后把a和b都删掉了?
点赞 回复 分享
发布于 03-28 22:27 福建
厉害啦,思路大家都知道,就是楼主的每一步都很优雅,佩服,这道题字节面试和京东面试都出过原题
点赞 回复 分享
发布于 2023-10-23 15:50 北京
牛客网用不了map和collection吗
点赞 回复 分享
发布于 2023-07-07 22:31 北京
break
点赞 回复 分享
发布于 2023-04-19 17:57 上海
s = s.replaceAll(String.valueOf(character), ""); s=s这里是不是有问题
点赞 回复 分享
发布于 2023-03-13 19:04 天津

相关推荐

评论
141
37
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务