451. 根据字符出现频率排序

集合

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

class Solution {
    public String frequencySort(String s) {

        /**
         * 使用map集合记录每个字符及其次数
         */
        HashMap<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }

        /**
         * 对map的值进行排序,需要将其转为List再排序
         * 先创建一个List对象,参数传入map.keySet()
         * 然后使用Collections.sort()方法,参数传入自定义的比较器
         */
        ArrayList<Character> list = new ArrayList<>(map.keySet());

        Collections.sort(list, (a, b) -> map.get(b) - map.get(a));

        /**
         * list中存放的是按次数从大到小排序的字符
         * 将其挨个添加进字符串
         */
        StringBuilder strs = new StringBuilder();

        for (char c : list){

            for (int i = 0; i < map.get(c); i++) {
                strs.append(c);
            }
        }

        return strs.toString();
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

https://leetcode-cn.com/problems/sort-characters-by-frequency/

posted @ 2021-12-01 17:09  振袖秋枫问红叶  阅读(33)  评论(0)    收藏  举报