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