Skip to content

Commit 113c682

Browse files
authored
Update Sort Characters By Frequency.java
1 parent 2aaa320 commit 113c682

File tree

1 file changed

+27
-36
lines changed

1 file changed

+27
-36
lines changed
Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,32 @@
11
class Solution {
2-
public String frequencySort(String s) {
3-
int[] freqMap = new int[62];
4-
int maxFrequency = 0;
5-
for (char c : s.toCharArray()) {
6-
int charIdx = getCharIndex(c);
7-
freqMap[charIdx]++;
8-
maxFrequency = Math.max(maxFrequency, freqMap[charIdx]);
9-
}
10-
List<Character>[] revMap = new List[maxFrequency + 1];
11-
for (int i = 0; i < 62; i++) {
12-
char c = getDecodedChar(i);
13-
int currFreq = freqMap[i];
14-
if (currFreq != 0) {
15-
if (revMap[currFreq] == null) {
16-
revMap[currFreq] = new ArrayList<>();
2+
3+
private static final String ALL_LETTERS =
4+
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
5+
6+
public String frequencySort(String s) {
7+
Map<Character, Integer> map = new HashMap<>();
8+
int maxFrequency = 0;
9+
for (char c : s.toCharArray()) {
10+
map.put(c, map.getOrDefault(c, 0) + 1);
11+
maxFrequency = Math.max(maxFrequency, map.get(c));
1712
}
18-
revMap[currFreq].add(c);
19-
}
20-
}
21-
StringBuilder sb = new StringBuilder();
22-
for (int i = maxFrequency; i > 0; i--) {
23-
if (revMap[i] != null) {
24-
List<Character> characterList = revMap[i];
25-
for (char c : characterList) {
26-
sb.append(String.valueOf(c).repeat(i));
13+
List<Character>[] frequencyToChar = new List[maxFrequency + 1];
14+
for (char c : map.keySet()) {
15+
if (frequencyToChar[map.get(c)] == null) {
16+
frequencyToChar[map.get(c)] = new ArrayList<>();
17+
}
18+
frequencyToChar[map.get(c)].add(c);
19+
}
20+
StringBuilder sb = new StringBuilder();
21+
for (int i = maxFrequency; i > 0; i--) {
22+
List<Character> characters = frequencyToChar[i] == null ?
23+
new ArrayList<>() : frequencyToChar[i];
24+
for (char c : characters) {
25+
for (int j = 0; j < i; j++) {
26+
sb.append(c);
27+
}
28+
}
2729
}
28-
}
30+
return sb.toString();
2931
}
30-
return sb.toString();
31-
}
32-
33-
private char getDecodedChar(int idx) {
34-
return (char) (idx < 26 ? 97 + idx : (idx >= 52 ? 48 + idx - 52 : 65 + idx - 26));
35-
}
36-
37-
private int getCharIndex(char c) {
38-
return Character.isDigit(c) ? 52 + c - '0'
39-
: (Character.isUpperCase(c) ? c - 'A' + 26 : c - 'a');
40-
}
4132
}

0 commit comments

Comments
 (0)