Нам будет задана строка s. Предположим, например, "creepfe". Что мы хотим сделать, так это удалить дубликаты и вместо этого добавить новую букву в этом месте, и новая буква должна быть отдельной буквой, доступной рядом с повторяющейся буквой в алфавитном порядке. Вот так:
creepfe to crefpfe -- первое e отличается, а второе e изменяется на f, которое отличается до этого.
crefpfe to crefpge -- вторая буква f заменяется на g, так как f у нас уже есть раньше.
crefpge в crefpgf -- так как e уже присутствует.
Теперь мы снова получили f-дубликат, поэтому измените его на crefpgg, который снова получил g-дубликат, так что, наконец, мы достигли «crefpgh», в котором все буквы разные.
Недавно начал изучать Java, и работающий код приветствуется, НО нужен хороший алгоритм.
Редактировать: да, заглавные буквы тоже считаются дубликатами. И длина строки ограничена 10-15, так что не беспокойтесь о том, что у вас закончится отдельная буква.
а как же столицы? будет ли это считаться дубликатом?
Да, заглавные буквы учитываются при дублировании!
Кажется, это задача для наборов. Вы пытались использовать set для символов в строке?
новичок здесь, понятия не имел, как действовать, кроме грубого форсирования (напишите функцию для проверки наличия буквы в строке и добавьте следующую букву, если она присутствует. И повторите снова) действительно нужна хорошая идея, чтобы уменьшить сложность.
^ хорошо, set используется, потому что проверка того, была ли буква уже видна ранее ( contains() ), является постоянной временной сложностью O (1).