Я пытаюсь решить эту проблему для интервью, которая просит перетасовать строку, чтобы две соседние буквы не совпадали Например,
ABCC → ACBC
Подход, о котором я думаю, заключается в
1) Итерируйте по входной строке и сохраните (букву, частоту) пары в некоторой коллекции
2) Теперь построим строку результата, вытащив самую высокую частоту (то есть > 0), которую мы не просто вытащили
3) Обновление (уменьшение) частоты всякий раз, когда мы тянем за букву
4) возвращает строку результата, если все буквы имеют нулевую частоту
5) вернуть ошибку, если мы остаемся с одной буквой с частотой больше 1
При таком подходе мы можем сохранить более драгоценные (менее частые) буквы для последнего. Но для этого нам нужна коллекция, которая позволяет нам эффективно запрашивать ключ и в то же время эффективно сортировать его по значениям. Что-то вроде this будет работать, за исключением того, что нам нужно сохранить сортировку отсортированной после каждого поиска писем.
Я принимаю символы Unicode.
Любые идеи о том, какую коллекцию использовать? Или альтернативный подход?