August 15, 2022

767. Reorganize String

767. Reorganize String

Hashmap + PriorityQueue.

class Solution {
    public String reorganizeString(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        PriorityQueue<Character> pq = new PriorityQueue((n1, n2) -> map.get(n2) - map.get(n1));
        pq.addAll(map.keySet());
        StringBuilder sb = new StringBuilder();
        while (pq.size() > 1) {
            char c1 = pq.poll();
            char c2 = pq.poll();
            sb.append(c1);
            sb.append(c2);
            map.put(c1, map.get(c1) - 1);
            map.put(c2, map.get(c2) - 1);
            if (map.get(c1) > 0) {
                pq.offer(c1);
            }
            if (map.get(c2) > 0) {
                pq.offer(c2);
            }
        }
        while (!pq.isEmpty()) {
            char c = pq.remove();
            if (map.get(c) > 1) {
                return "";
            }
            sb.append(c);
        }
        return sb.toString();
    }
}
comments powered by Disqus