zoukankan      html  css  js  c++  java
  • 统计字符串中各字符出现的频率并按要求打印

    给出一个字符串str,要求按照字符出现的频率,降序打印出来,比如如下结果:

    输入:ahinfhhaaahgiajrbgjbsgbaa

    输出:aaaaaaahhhhbbbgggiijjrsfn

    ======================================================

    在统计字符串出现的频率时,我们很容易便想到利用Map:Map中的key可以用来存放出现的字符,value可以用来记录对应的key出现的次数。难点便是,如何去对Map中的value进行降序排序,并且打印key。

    我个人的话是忘了Map中是否有方法可以直接对value进行排序的了,所以只能利用List来对Map的Entry进行排序。求得结果之后,才按照顺序把对应的key打印出来。其中我们在利用List进行排序时,需要实现Comparator接口,重写compare方法。

    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String str = "";
            System.out.println("请输入字符串:");
            str = sc.nextLine();
            printString(str);
        }
        
        public static void printString(String str) {
            char[] ch = str.toCharArray();
            Map<Character, Integer> map = new HashMap<>();
            for(char c : ch) {
                if(map.containsKey(c)) {
                    int k = map.get(c) + 1;
                    map.put(c, k);
                }else {
                    map.put(c, 1);
                }
            }
            List<Map.Entry<Character, Integer>> list = new ArrayList<>();
            for(Map.Entry<Character, Integer> entry : map.entrySet()) {
                list.add(entry);
            }
            Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>(){
                public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                    return o2.getValue() - o1.getValue();
                }
            });
            for(Map.Entry<Character, Integer> me : list) {
                int counts = 0;
                while(counts < me.getValue()) {
                    System.out.print(me.getKey());
                    counts++;
                }
            }
        }
    
    }

    代码执行结果如下:

  • 相关阅读:
    QB学堂济南游记
    区间质数查询 luoguP1865
    基础数据结构 ①(栈|队列|链表)
    图论算法->最短路
    小谈记忆化搜索
    Hibernate其它API
    Hibernate中Session与本地线程绑定
    Hibernate事务代码规范写法
    实体类对象的三种状态
    对实体类的CRUD操作
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/13587868.html
Copyright © 2011-2022 走看看