美文网首页
Leetcode 精选之排序(根据字符出现频率排序)

Leetcode 精选之排序(根据字符出现频率排序)

作者: Kevin_小飞象 | 来源:发表于2020-03-27 11:11 被阅读0次

    题目描述

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    题目链接:力扣

    解题思路

    import java.util.*;
    public class Main {
        
        public static void main(String[] args) {
            System.out.println(frequencySort("tree"));
            System.out.println(frequencySort("cccaaa"));
            System.out.println(frequencySort("Aabb"));
        }
    
        public static String frequencySort(String s) {
            Map<Character, Integer> frequencyForNum = new HashMap<>();
            for (char c : s.toCharArray()) {
                frequencyForNum.put(c, frequencyForNum.getOrDefault(c, 0) + 1);
            }
            
            List<Character>[] frequencyBucket = new ArrayList[s.length() + 1];
            for (char c : frequencyForNum.keySet()) {
                int f = frequencyForNum.get(c);
                if (frequencyBucket[f] == null) {
                    frequencyBucket[f] = new ArrayList<>();
                }
                frequencyBucket[f].add(c);
            }
            StringBuilder str = new StringBuilder();
            for (int i = frequencyBucket.length - 1; i >= 0; i--) {
                if (frequencyBucket[i] == null) {
                    continue;
                }
                for (char c : frequencyBucket[i]) {
                    for (int j = 0; j < i; j++) {
                        str.append(c);
                    }
                }
            }
            return str.toString();
        }
    }
    
    

    测试结果

    image.png

    相关文章

      网友评论

          本文标题:Leetcode 精选之排序(根据字符出现频率排序)

          本文链接:https://www.haomeiwen.com/subject/brxluhtx.html