451_根据字符出现频率排序

 

package 队列.优先级队列;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;

/**
* https://leetcode-cn.com/problems/sort-characters-by-frequency/
*
* @author Huangyujun
*
* 出现频率:哈希表【当前字母 ,次数】 优先队列【】
*/
public class _451_根据字符出现频率排序 {
/**
* 官网解法:与我相比://取出所有的key【字符】构成一个集合,【通过map.get(字符)】进行降序排序 List list =
* new ArrayList(map.keySet()); Collections.sort(list, (a, b) ->
* map.get(b) - map.get(a));
*
* @author Huangyujun
*
*/
class Solution2 {
public String frequencySort(String s) {
Map map = new HashMap();
int length = s.length();
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
int frequency = map.getOrDefault(c, 0) + 1;
map.put(c, frequency);
}
// 取出所有的key【字符】构成一个集合,【通过map.get(字符)】进行降序排序
// 然后 stringBuffer 进行拼接
List list = new ArrayList(map.keySet());
Collections.sort(list, (a, b) -> map.get(b) - map.get(a));
StringBuffer sb = new StringBuffer();
int size = list.size();
for (int i = 0; i < size; i++) {
char c = list.get(i);
int frequency = map.get(c);
for (int j = 0; j < frequency; j++) {
sb.append(c);
}
}
return sb.toString();
}
}

/**
* 我卡壳的解法:缺少了一些知识储备:通过entrySet 取到结点集合
* ArrayList(map.keySet()); Collections.sort(list, (a, b) ->
* map.get(b) - map.get(a));
*/
// public String frequencySort(String s) {
// HashMap map = new HashMap<>();
// int len = s.length();
// for(int i = 0; i < len; i++) {
// Character ch = s.charAt(i);
// if(map.containsKey(ch)) {
// int count = map.get(ch);
// map.put(ch, count);
// }else {
// map.put(ch, 1);
// }
// }
// StringBuffer sb = new StringBuffer();
// int size = map.size();//无法通过value得到key呀, 通过keySet 拿出所有的 key构成集合,然后,通过工具类Collections 进行排序
// for(int i = 0; i < size - 1; i++) {
// //假设当前是最大数
// int count = map.get(i);
//
// for(int j = 1; j < size; j++) {
// if(count < map.get(j)) {
// count = map.get(j);
// }
// }
//
// }
// return null;
// }

}

 


本文来自博客园,作者:​​一乐乐​​​,转载请注明原文链接:​​javascript:void(0)p/15709180.html​