给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
返回 已排序的字符串 。如果有多个答案,返回其中任何一个。
class Solution {
public static String frequencySort(String s) {
Map<Character,Integer> map = new HashMap<>();
int maxFre = 0;
for (int i = 0; i < s.length(); i++) {
Integer fre = map.getOrDefault(s.charAt(i),0)+1;
map.put(s.charAt(i), fre);
maxFre = Math.max(maxFre, fre);
}
StringBuffer [] bucket = new StringBuffer[maxFre+1];
// 需要初始化
for (int i = 0; i < bucket.length; i++) {
bucket[i] = new StringBuffer();
}
Set<Map.Entry<Character, Integer>> entries = map.entrySet();
for (Map.Entry<Character, Integer> entry:entries) {
bucket[entry.getValue().intValue()].append(entry.getKey().charValue());
}
StringBuffer res = new StringBuffer();
for (int i = maxFre; i >= 0; i--) {
for (int j = 0; j < bucket[i].length(); j++) {
for (int k = 0; k < i; k++) {
res.append(bucket[i].charAt(j));
}
}
}
return res.toString();
}
}
思路:桶排序以空间换时间,尽量减少空间占用。