[LeetCode] LeetCode451. 根据字符出现频率排序

发布时间 2023-12-16 21:04:32作者: Ac_c0mpany丶

题目描述

思路:使用大顶堆

方法一:

class Solution {
    public String frequencySort(String s) {
        // 1. HashMap统计词频
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        // 2. 放入大顶堆中
        PriorityQueue<Map.Entry<Character, Integer>> heap = new PriorityQueue<>((e1, e2) -> e2.getValue() - e1.getValue());
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            heap.add(entry);
        }
 
        // 3. 拼接结果
        StringBuilder sb = new StringBuilder();
        while (!heap.isEmpty()) {
            Map.Entry<Character, Integer> entry = heap.remove();
            for (int i = 0; i < entry.getValue(); i ++) sb.append(entry.getKey());
        }
        return sb.toString();
    }
}