zoukankan      html  css  js  c++  java
  • 【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'被认为是两种不同的字符。
    

    解题思路

    使用桶排序,和第 347 题思路基本一致,区别就是,第 347 题是对动态数组的操作,本题是对字符串的操作。

    Java 实现

    public String frequencySort (String s) {
        HashMap<Character,Integer> frequencyMap = new HashMap<>();
        for (char c : s.toCharArray()) {
            frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
        }
    
        List<Character>[] bucket = new ArrayList[s.length() + 1];
        for (Character character : frequencyMap.keySet()) {
            int frequency = frequencyMap.get(character);
            if (bucket[frequency] == null) {
                bucket[frequency] = new ArrayList();
            }
            bucket[frequency].add(character);
        }
        StringBuilder ans = new StringBuilder();
        for (int i = bucket.length - 1; i > 0; i--) {
            if (bucket[i] == null)
                continue;
            for (Character character : bucket[i]) {
                for (int j = 0; j < i; j++) {
                    ans.append(character);
                }
            }
        }
        return ans.toString();
    }
    
  • 相关阅读:
    js_sl 分享
    js_sl 延迟菜单
    jszs 历史管理
    jszs 对象引用
    jszs 快速排序
    jszs 枚举算法
    dom cookie记录用户名
    dom 拖拽回放
    dom div重合提示
    dom 输入文字模拟滚动
  • 原文地址:https://www.cnblogs.com/yuzhenzero/p/10696945.html
Copyright © 2011-2022 走看看