zoukankan      html  css  js  c++  java
  • 451. Sort Characters By Frequency

    Given a string, sort it in decreasing order based on the frequency of characters.

    Example 1:

    Input:
    "tree"
    
    Output:
    "eert"
    
    Explanation:
    'e' appears twice while 'r' and 't' both appear once.
    So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.

    Example 2:

    Input:
    "cccaaa"
    
    Output:
    "cccaaa"
    
    Explanation:
    Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
    Note that "cacaca" is incorrect, as the same characters must be together.

    Example 3:

    Input:
    "Aabb"
    
    Output:
    "bbAa"
    
    Explanation:
    "bbaA" is also a valid answer, but "Aabb" is incorrect.
    Note that 'A' and 'a' are treated as two different characters.

    首先用hashmap扫一遍string,统计频率。按频率排序,将hashmap的entry存入max heap,再一个个poll出来,append到StringBuilder

    时间:O(NlogN),空间:O(N)

    class Solution {
        public String frequencySort(String s) {
            HashMap<Character, Integer> map = new HashMap<>();
            PriorityQueue<Map.Entry<Character, Integer>> maxHeap = new PriorityQueue<>((a, b) -> (b.getValue() - a.getValue()));
            
            for(char c : s.toCharArray()) {
                map.put(c, map.getOrDefault(c, 0) + 1);
            }
            
            for(Map.Entry<Character, Integer> entry : map.entrySet()) {
                maxHeap.offer(entry);
            }
            
            StringBuilder sb = new StringBuilder();
            while(!maxHeap.isEmpty()) {
                Map.Entry<Character, Integer> tmp = maxHeap.poll();
                for(int j = 0; j < tmp.getValue(); j++)
                    sb.append(tmp.getKey());
            }
            return sb.toString();
        }
    }
    class Solution {
        public String frequencySort(String s) {
            Map<Character, Integer> map = new HashMap<>();
            for(int i = 0; i < s.length(); i++) {
                map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
            }
            
            PriorityQueue<Map.Entry<Character, Integer>> maxHeap = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
            maxHeap.addAll(map.entrySet());
            
            StringBuilder sb = new StringBuilder();
            while(!maxHeap.isEmpty()) {
                Map.Entry<Character, Integer> entry = maxHeap.poll();
                for(int i = 0; i < entry.getValue(); i++)
                    sb.append(entry.getKey());
            }
            return sb.toString();
        }
    }
  • 相关阅读:
    MATLAB学习1 之画图函数
    innobackupex 出现Unrecognized character x01; marked by
    innobackupex 出现Unrecognized character x01; marked by
    innobackupex 出现Unrecognized character x01; marked by
    innobackupex 出现Unrecognized character x01; marked by
    企业云桌面-03-安装第1个企业 CA-013-CA01
    python 串行执行和并行执行
    cx_Oracle 查询 传参
    运维工程师要失业了?抛开噱头与调侃,闲聊我心中的运维!
    迭代器
  • 原文地址:https://www.cnblogs.com/fatttcat/p/9988434.html
Copyright © 2011-2022 走看看