Skip to content

Commit 343b1fc

Browse files
committed
Updated Reorganize String.java
1 parent 3208844 commit 343b1fc

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

Medium/Reorganize String.java

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
11
class Solution {
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);
6-
}
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 "";
2+
public String reorganizeString(String s) {
3+
Map<Character, Integer> map = new HashMap<>();
4+
int maxFrequency = 0;
5+
char maxFrequencyLetter = ' ';
6+
int n = s.length();
7+
for (char c : s.toCharArray()) {
8+
map.put(c, map.getOrDefault(c, 0) + 1);
9+
if (maxFrequency < map.get(c)) {
10+
maxFrequency = map.get(c);
11+
maxFrequencyLetter = c;
12+
}
13+
}
14+
if (maxFrequency > (n + 1) / 2) {
15+
return "";
1616
}
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-
}
17+
char[] letters = new char[s.length()];
18+
int idx = 0;
19+
idx = insertLetter(n, map, maxFrequencyLetter, letters, idx);
20+
map.remove(maxFrequencyLetter);
21+
for (Character key : map.keySet()) {
22+
idx = insertLetter(n, map, key, letters, idx);
23+
}
24+
return String.valueOf(letters);
2525
}
26-
return sb.toString();
27-
}
2826

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);
27+
private static int insertLetter(int n, Map<Character, Integer> map, char maxFrequencyLetter, char[] letters, int idx) {
28+
while (map.get(maxFrequencyLetter) > 0) {
29+
if (idx >= n) {
30+
idx = 1;
31+
}
32+
letters[idx] = maxFrequencyLetter;
33+
idx += 2;
34+
map.put(maxFrequencyLetter, map.get(maxFrequencyLetter) - 1);
35+
}
36+
return idx;
3537
}
36-
}
3738
}

0 commit comments

Comments
 (0)