v_yanushkovsky

#767 Reorganize String

Jul 18th, 2026
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. string reorganizeString(string s) {
  2.     // 1. Подсчёт частот символов
  3.     vector<int> freq(26, 0);
  4.     for (char c : s) {
  5.         freq[c - 'a']++;
  6.     }
  7.  
  8.     // 2. Max-heap: храним пары (частота, символ)
  9.     priority_queue<pair<int, char>> pq;
  10.     for (int i = 0; i < 26; i++) {
  11.         if (freq[i] > 0) {
  12.             pq.push({ freq[i], 'a' + i });
  13.         }
  14.     }
  15.  
  16.     // 3. Проверка на возможность перестановки
  17.     // Если самый частый символ встречается больше (n+1)/2 раз — невозможно
  18.     if (pq.top().first > (s.length() + 1) / 2) {
  19.         return "";
  20.     }
  21.  
  22.     // 4. Построение результата
  23.     string result = "";
  24.  
  25.     while (pq.size() >= 2) {
  26.         // Берём два самых частых символа
  27.         auto first = pq.top(); pq.pop();
  28.         auto second = pq.top(); pq.pop();
  29.  
  30.         // Добавляем их в результат
  31.         result += first.second;
  32.         result += second.second;
  33.  
  34.         // Уменьшаем частоты и возвращаем в heap, если остались
  35.         if (--first.first > 0) pq.push(first);
  36.         if (--second.first > 0) pq.push(second);
  37.     }
  38.  
  39.     // 5. Если остался один символ (с частотой 1)
  40.     if (!pq.empty()) {
  41.         result += pq.top().second;
  42.     }
  43.  
  44.     return result;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment