451. 根据字符出现频率排序
集合
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
class Solution {
public String frequencySort(String s) {
/**
* 使用map集合记录每个字符及其次数
*/
HashMap<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);
}
/**
* 对map的值进行排序,需要将其转为List再排序
* 先创建一个List对象,参数传入map.keySet()
* 然后使用Collections.sort()方法,参数传入自定义的比较器
*/
ArrayList<Character> list = new ArrayList<>(map.keySet());
Collections.sort(list, (a, b) -> map.get(b) - map.get(a));
/**
* list中存放的是按次数从大到小排序的字符
* 将其挨个添加进字符串
*/
StringBuilder strs = new StringBuilder();
for (char c : list){
for (int i = 0; i < map.get(c); i++) {
strs.append(c);
}
}
return strs.toString();
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(n)
*/
https://leetcode-cn.com/problems/sort-characters-by-frequency/