Skip to content

Commit 1e21412

Browse files
committed
Sort Characters By Frequency: Finished
1 parent f59928a commit 1e21412

File tree

1 file changed

+51
-8
lines changed

1 file changed

+51
-8
lines changed
Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,64 @@
11
package leetcode.medium.page5;
22

3-
import java.util.Collections;
3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
import java.util.Map;
46

57
public class SortCharactersByFrequency {
6-
int[] bucket = new int[52];
8+
Map<Character,Bucket> buckets = new HashMap();
79

810
public String frequencySort(String s) {
911
for (char ch : s.toCharArray()) {
10-
if (ch >= 'a' && ch <= 'z') {
11-
bucket[ch - 'a']++;
12-
} else if (ch >= 'A' && ch <= 'Z') {
13-
bucket[ch - 'A' + 26]++;
12+
Bucket bucket;
13+
if (!buckets.containsKey(ch)) {
14+
bucket = new Bucket(ch);
15+
} else {
16+
bucket = buckets.get(ch);
1417
}
18+
19+
bucket.increment();
20+
buckets.put(ch, bucket);
21+
}
22+
23+
Bucket[] sortedBucketArr = new Bucket[buckets.size()];
24+
sortedBucketArr = buckets.values().toArray(sortedBucketArr);
25+
Arrays.sort(sortedBucketArr);
26+
27+
StringBuilder sb = new StringBuilder();
28+
for (Bucket bucket : sortedBucketArr) {
29+
for (int i = 0; i < bucket.count; i++) {
30+
sb.append(bucket.alpha);
31+
}
32+
}
33+
34+
return sb.toString();
35+
}
36+
37+
class Bucket implements Comparable<Integer> {
38+
char alpha;
39+
Integer count = 0;
40+
41+
public Bucket(char alpha) {
42+
this.alpha = alpha;
43+
}
44+
45+
public void increment() {
46+
count++;
1547
}
1648

17-
Collections.so
49+
@Override
50+
public int compareTo(Integer o) {
51+
return count - o;
52+
}
53+
54+
@Override
55+
public int hashCode() {
56+
return alpha;
57+
}
1858

19-
return null;
59+
@Override
60+
public boolean equals(Object bucket) {
61+
return alpha == ((Bucket) bucket).alpha;
62+
}
2063
}
2164
}

0 commit comments

Comments
 (0)