451. Sort Characters By Frequency

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution {
public String frequencySort(String s) {
Map<Character, Integer> charToFrequencyMap = new HashMap<>();
int maxFrequency = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int frequency = charToFrequencyMap.getOrDefault(c, 0) + 1;
maxFrequency = Math.max(frequency, maxFrequency);
charToFrequencyMap.put(c, frequency);
}

StringBuilder[] sbArray = new StringBuilder[maxFrequency + 1];

for (Map.Entry<Character, Integer> entry : charToFrequencyMap.entrySet()) {
char c = entry.getKey();
int frequency = entry.getValue();

StringBuilder sb = sbArray[frequency];
if (sb == null) {
sbArray[frequency] = sb = new StringBuilder();
}

sb.append(c);
}

StringBuilder resBuilder = new StringBuilder();
for (int i = maxFrequency; i > 0; i--) {
StringBuilder sb = sbArray[i];
if (sb != null) {
for (int j = 0; j < sb.length(); j++) {
for (int k = 0; k < i; k++) {
resBuilder.append(sb.charAt(j));
}
}
}
}

return resBuilder.toString();
}
}

References

451. Sort Characters By Frequency