2
public String reorganizeString(String s) {3
StringBuilder ans = new StringBuilder("");4
char[] charArray = new char[s.length()];5
Map<Character, Integer> hashMap = new HashMap<>();6
Queue<CharOccurence> queue = new PriorityQueue<>((a, b) -> b.occurence - a.occurence);8
charArray = s.toCharArray();10
for (int i = 0; i < charArray.length; i++) {11
Integer occurence = hashMap.get(charArray[i]);12
if (occurence == null) hashMap.put(charArray[i], 1);13
else hashMap.put(charArray[i], occurence + 1);16
hashMap.entrySet().stream()18
.map(e -> new CharOccurence(e.getKey(), e.getValue()))19
.collect(Collectors.toList()));20
while (!queue.isEmpty()) {21
Queue<CharOccurence> tmpQueue = new LinkedList<>();22
int sizeQueue = queue.size();23
int stringLength = ans.length();24
int startSub = (stringLength - 1 < 0) ? 0 : stringLength - 1;25
int endSub = stringLength;26
String lastLetter = ans.substring(startSub, endSub);27
boolean letterAdded = false;28
for (int i = 0; i < sizeQueue; i++) {29
CharOccurence letter = queue.poll();30
if (!lastLetter.contains(String.valueOf(letter.letter))) {32
ans.append(String.valueOf(letter.letter));33
if (letter.occurence > 0) tmpQueue.add(letter);40
if (!letterAdded) return "";41
queue.addAll(tmpQueue);43
return ans.toString();47
public Character letter;50
public CharOccurence(Character letter, int occurence) {52
this.occurence = occurence;