Reorganize String - The Character Separation Challenge

Given a string s, your task is to rearrange its characters so that no two adjacent characters are identical. Think of it as organizing a queue where no two people with the same name can stand next to each other!

Goal: Return any valid rearrangement of the string, or return an empty string "" if it's impossible to create such an arrangement.

Key Insight: This problem tests your ability to use greedy algorithms and priority queues to manage character frequencies optimally.

Examples:
• Input: "aab" → Output: "aba"
• Input: "aaab" → Output: "" (impossible)
• Input: "aabbcc" → Output: "abacbc"

Input & Output

example_1.py — Basic case with solution
$ Input: s = "aab"
Output: "aba"
💡 Note: We have 2 'a's and 1 'b'. We can arrange them as 'aba' where no two adjacent characters are the same. Another valid arrangement would be 'baa' is not valid since 'aa' are adjacent.
example_2.py — Impossible case
$ Input: s = "aaab"
Output: ""
💡 Note: We have 3 'a's and 1 'b'. Since we have more than half the characters as 'a' (3 out of 4), it's impossible to arrange them without having adjacent 'a's. The maximum frequency allowed is ⌈4/2⌉ = 2.
example_3.py — Multiple characters
$ Input: s = "aabbcc"
Output: "abcabc"
💡 Note: Each character appears twice. We can arrange them by rotating through different characters: a→b→c→a→b→c. Other valid arrangements include 'ababcc', 'abacbc', etc.

Constraints

  • 1 ≤ s.length ≤ 500
  • s consists of lowercase English letters only
  • Key insight: If any character appears more than ⌈n/2⌉ times, reorganization is impossible
Asked in
25.0K Views
Medium Frequency
~15 min Avg. Time
850 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen