Переставьте символы в отсортированной строке так, чтобы никакие пары соседних символов не совпадали.
Опубликовано: 22 Сентября, 2022
Дана отсортированная строка S , состоящая из N символов нижнего регистра. Задача состоит в том, чтобы переставить символы в заданной строке так, чтобы никакие два соседних символа не были одинаковыми. Если переставить по заданным критериям невозможно, то выведите «-1» .
Примеры:
Input: S = “aaabc”
Output: abacaInput: S = “aa”
Output: -1
Подход: Данная проблема может быть решена с помощью метода двух указателей. Выполните следующие шаги, чтобы решить эту проблему:
- Переберите символы строки S и проверьте, не совпадают ли в строке два соседних символа, а затем напечатайте строку S .
- В противном случае, если размер строки равен 2 и содержит те же символы, то выведите «-1» .
- Инициализируйте три переменные, скажем, i как 0 , j как 1 и k как 2 для обхода строки S .
- Итерируйте, пока k меньше N , и выполните следующие шаги:
- Если S[i] не равно S[j] , то увеличьте i и j на 1 и увеличьте k на 1 , если значение j равно k .
- В противном случае, если S[j] равно S[k] , увеличьте k на 1 .
- В противном случае поменяйте местами s[j] и s[k] и увеличьте i и j на 1 , а если j равно k, то увеличьте k на 1 .
- После выполнения вышеуказанных шагов переверните строку S .
- Наконец, переберите символы строки S и проверьте, нет ли двух одинаковых соседних символов. Если окажется, что это правда , выведите строку S . В противном случае выведите «-1» .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N), так как мы используем обратную функцию, которая будет стоить O (N) времени.
Вспомогательное пространство: O(1), так как мы не используем дополнительное пространство.