应用桶排序:
class Solution {
public String frequencySort(String s) {
char[] cstr=s.toCharArray();
Map<Character, Integer> frequencyForS=new HashMap<Character, Integer>();
for(char c:cstr) {
frequencyForS.put(c, frequencyForS.getOrDefault(c, 0)+1);
}//结束之后所有的字符出现的次数已经放入HashMap中
List<Character>[] buckets=new ArrayList[cstr.length+1];//列表的列表
for(char c:frequencyForS.keySet()) {
int frequency=frequencyForS.get(c);
if(buckets[frequency]==null){
buckets[frequency]=new ArrayList<Character>();
}
buckets[frequency].add(c);
}
StringBuilder str=new StringBuilder();
for(int i=buckets.length-1;i>=0;i--) {
if(buckets[i]==null) {
continue;
}
for(char c:buckets[i]) {
for(int j=0;j<i;j++) {
str.append(c);
}
}
}
return str.toString();
}
}
总结:关于频率的都可以使用桶排序来操作,特别是在根据频率的大小排序后要输出原始对应的数据时。