• 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'被认为是两种不同的字符。

    利用PriorityQueue去做

     1 public class Solution {
     2     public String frequencySort(String s) {
     3         Map<Character,Integer> map = new HashMap<>();
     4         char[] letters = s.toCharArray();
     5         for(char l:letters) {
     6             if(map.containsKey(l)) {map.put(l, map.get(l)+1);}
     7             else {map.put(l, 1);}
     8         }
     9         PriorityQueue<Map.Entry<Character,Integer>> pq = new PriorityQueue<>(
    10                 new Comparator<Map.Entry<Character,Integer>>(){
    11                     @Override
    12                     public int compare(Map.Entry<Character,Integer> a,Map.Entry<Character,Integer> b) {
    13                         return b.getValue()-a.getValue();
    14                     }
    15                 }
    16         );
    17         pq.addAll(map.entrySet());
    18         StringBuilder sb = new StringBuilder();
    19         while(!pq.isEmpty()) {
    20             Map.Entry<Character, Integer> e = pq.poll();
    21             for(int i=0;i<e.getValue();i++) sb.append(e.getKey());
    22         }
    23         return sb.toString();
    24     }
    25 }
  • 相关阅读:
    2019春总结作业
    2019春第十二周作业
    2019春第十一周作业
    第九周作业
    2019春第八周作业
    第七周作业
    第六周作业
    第五周作业 英文单词排序
    2019年春季学期第四周作业
    2019春第三周作业
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10269847.html
Copyright © 2020-2023  润新知