Reorganize String
Problem Statement
Given a string, reorganize it so no two adjacent characters are the same. If impossible, return "". This medium-level greedy problem is about rearrangement—space out those letters!
Example
Input: s = "aab"
Output: "aba"
Input: s = "aaab"
Output: "" (impossible)
Code
Java
Python
JavaScript
public class Solution { public String reorganizeString(String s) { int[] count = new int[26]; for (char c : s.toCharArray()) count[c - 'a']++; int maxCount = 0, maxChar = 0; for (int i = 0; i < 26; i++) { if (count[i] > maxCount) { maxCount = count[i]; maxChar = i; } } if (maxCount > (s.length() + 1) / 2) return ""; char[] result = new char[s.length()]; int idx = 0; while (count[maxChar] > 0) { result[idx] = (char) (maxChar + 'a'); count[maxChar]--; idx += 2; } for (int i = 0; i < 26; i++) { while (count[i] > 0) { if (idx >= s.length()) idx = 1; result[idx] = (char) (i + 'a'); count[i]--; idx += 2; } } return new String(result); } }
def reorganize_string(s): count = {} for c in s: count[c] = count.get(c, 0) + 1 max_count, max_char = max((v, k) for k, v in count.items()) if max_count > (len(s) + 1) // 2: return "" result = [''] * len(s) idx = 0 while count[max_char] > 0: result[idx] = max_char count[max_char] -= 1 idx += 2 for c in count: while count[c] > 0: if idx >= len(s): idx = 1 result[idx] = c count[c] -= 1 idx += 2 return ''.join(result)
function reorganizeString(s) { let count = {}; for (let c of s) count[c] = (count[c] || 0) + 1; let maxCount = 0, maxChar = ''; for (let c in count) { if (count[c] > maxCount) { maxCount = count[c]; maxChar = c; } } if (maxCount > Math.floor((s.length + 1) / 2)) return ""; let result = new Array(s.length); let idx = 0; while (count[maxChar] > 0) { result[idx] = maxChar; count[maxChar]--; idx += 2; } for (let c in count) { while (count[c] > 0) { if (idx >= s.length) idx = 1; result[idx] = c; count[c]--; idx += 2; } } return result.join(''); }
Explanation
- Greedy Choice: Place the most frequent character in even positions, then fill others.
- Flow: Check feasibility, interleave characters.
- Example: "aab" → "aba" by placing 'a' at 0,2, 'b' at 1.
Note
Time complexity: O(n), Space complexity: O(n). Rearrange with flair!