leetcode.排序.451根据字符出现频率排序-Java
Posted les111ley
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode.排序.451根据字符出现频率排序-Java相关的知识,希望对你有一定的参考价值。
1. 具体题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1: 输入: "tree" 输出: "eert" 解释: \'e\'出现两次,\'r\'和\'t\'都只出现一次。因此\'e\'必须出现在\'r\'和\'t\'之前。此外,"eetr"也是一个有效的答案。
2.思路分析
桶排序,思路同 leetcode347(https://www.cnblogs.com/XRH2019/p/11959468.html)
注意:向字符串中添加字符用 StringBuffer,直接用"string" + char 会超出时间限制
3. 代码
1 public String frequencySort(String s) { 2 HashMap<Character,Integer> map = new HashMap<>(); 3 for(int i = 0; i < s.length(); i++){ 4 char c = s.charAt(i); 5 map.put(c, map.getOrDefault(c,0) + 1); 6 } 7 List<Character>[] frequency = new ArrayList[s.length() + 1]; 8 for(char key : map.keySet()){ 9 int index = map.get(key); 10 if(frequency[index] == null){ 11 frequency[index] = new ArrayList<>(); 12 } 13 frequency[index].add(key); 14 } 15 StringBuffer ans = new StringBuffer(); 16 for(int i = frequency.length - 1; i >= 0; i--){ 17 if(frequency[i] == null) continue; 18 for(char c : frequency[i]){ 19 for(int count = 0; count < i; count++){ 20 ans.append(c); 21 } 22 } 23 } 24 return ans.toString(); 25 }
以上是关于leetcode.排序.451根据字符出现频率排序-Java的主要内容,如果未能解决你的问题,请参考以下文章