Skip to content

Commit fc59cb8

Browse files
authored
Update Reorganize String.java
1 parent 560256d commit fc59cb8

File tree

1 file changed

+31
-38
lines changed

1 file changed

+31
-38
lines changed

Medium/Reorganize String.java

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,37 @@
11
class Solution {
2-
public String reorganizeString(String S) {
3-
int buffer = S.length()%2 == 0 ? S.length()/2 : S.length()/2 + 1;
4-
Map<Character, Integer> map = new HashMap<>();
5-
char[] chars = S.toCharArray();
6-
7-
for (char c : chars) {
8-
map.put(c, map.getOrDefault(c, 0) + 1);
9-
if (map.get(c) > buffer) {
10-
return "";
11-
}
12-
}
13-
14-
return createString(map);
2+
public String reorganizeString(String s) {
3+
Map<Character, Integer> map = new HashMap<>();
4+
for (char c : s.toCharArray()) {
5+
map.put(c, map.getOrDefault(c, 0) + 1);
156
}
16-
17-
private String createString(Map<Character, Integer> map) {
18-
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);
19-
for (char c : map.keySet()) {
20-
pq.add(new int[] {c, map.get(c)});
21-
}
22-
23-
StringBuilder sb = new StringBuilder();
24-
while (!pq.isEmpty()) {
25-
int[] first = pq.poll();
26-
if (sb.length() == 0 || first[0] != sb.charAt(sb.length() - 1)) {
27-
sb.append((char) first[0]);
28-
if (--first[1] > 0) {
29-
pq.add(first);
30-
}
31-
}
32-
else {
33-
int[] second = pq.poll();
34-
sb.append((char) second[0]);
35-
if (--second[1] > 0) {
36-
pq.add(second);
37-
}
38-
pq.add(first);
39-
}
7+
PriorityQueue<Character> pq = new PriorityQueue<>(
8+
(o1, o2) -> map.get(o2).compareTo(map.get(o1)));
9+
pq.addAll(map.keySet());
10+
StringBuilder sb = new StringBuilder();
11+
while (!pq.isEmpty()) {
12+
char removed = pq.poll();
13+
if (!sb.isEmpty() && sb.charAt(sb.length() - 1) == removed) {
14+
if (pq.isEmpty()) {
15+
return "";
4016
}
17+
char secondRemoved = pq.poll();
18+
pq.add(removed);
19+
sb.append(secondRemoved);
20+
updateStructure(map, pq, secondRemoved);
21+
} else {
22+
sb.append(removed);
23+
updateStructure(map, pq, removed);
24+
}
25+
}
26+
return sb.toString();
27+
}
4128

42-
return sb.toString();
29+
private void updateStructure(Map<Character, Integer> map, PriorityQueue<Character> pq, char c) {
30+
map.put(c, map.get(c) - 1);
31+
if (map.get(c) > 0) {
32+
pq.add(c);
33+
} else {
34+
map.remove(c);
4335
}
36+
}
4437
}

0 commit comments

Comments
 (0)