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

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

示例 1:

输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

示例 2:

输入:
"cccaaa"
输出:
"cccaaa"
解释:
'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例 3:

输入:
"Aabb"
输出:
"bbAa"
解释:
此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。
package com.example.lettcode.sort;

import java.util.*;

/**
 * @Class FrequencySort
 * @Description 451 根据字符出现频率排序
 * @Author
 * @Date 2021/7/3
 **/
public class FrequencySort {
    /**
     * 哈希
     *
     * @param s
     * @return
     */
    public static String frequencySort(String s) {
        if (s == null || s.length() == 0) return s;

        Map<Character, Integer> characterIntegerMap = new HashMap<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (characterIntegerMap.containsKey(chars[i])) {
                int value = characterIntegerMap.get(chars[i]);
                value++;
                characterIntegerMap.put(chars[i], value);
            } else {
                characterIntegerMap.put(chars[i], 1);
            }
        }
        // Map转为List,再利用Collections.sort进行排序
        List<Map.Entry<Character, Integer>> entryList = new ArrayList<Map.Entry<Character, Integer>>(characterIntegerMap.entrySet());
        Collections.sort(entryList, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                return o2.getValue() - o1.getValue();
            }
        });

        StringBuilder stringBuilder = new StringBuilder("");
        for (Map.Entry<Character, Integer> entry : entryList) {
            for (int i = 0; i < entry.getValue(); i++) {
                stringBuilder.append(entry.getKey());
            }
        }
        return stringBuilder.toString();
    }
}
// 测试用例
public static void main(String[] args) {
    String s = "tree";
    String ansStr = FrequencySort.frequencySort(s);
    System.out.println("FrequencySort demo01 result : " + ansStr);

    s = "cccaaa";
    ansStr = FrequencySort.frequencySort(s);
    System.out.println("FrequencySort demo02 result : " + ansStr);

    s = "Aabb";
    ansStr = FrequencySort.frequencySort(s);
    System.out.println("FrequencySort demo02 result : " + ansStr);
}
原文地址:https://www.cnblogs.com/fyusac/p/14966450.html