LC 451 Sort Characters By Frequency(M)
解题思路 Map, Bucket Sort, PriorityQueue
public String frequencySort(String s) {
if(s.length()<3)
return s;
// Step 1 count
Map<Character, Integer> maps = new HashMap<Character, Integer>();
for(char c : s.toCharArray()){
if(!maps.containsKey(c)){
maps.put(c, 1);
}else{
maps.put(c, maps.get(c) + 1);
}
}
// Step 2 sort
List<Character>[] bucket = new List[s.length() + 1];
for(char key : maps.keySet()){
int amount = maps.get(key);
if(bucket[amount] == null){
bucket[amount] = new ArrayList<Character>();
}
bucket[amount].add(key);
}
// Step 3 build
StringBuilder sb = new StringBuilder();
for(int i = bucket.length - 1; i > 0 ; i--){
if(bucket[i] != null){
for(char ch : bucket[i]){
for(int j = 0; j < i; j++){
sb.append(ch);
}
}
}
}
return sb.toString();
}Last updated