Это будет зависеть от характеристик ваших данных. Строка очень длинная? Ожидается ли много дубликатов? Каков диапазон возможных символов в строке (это английский? Китайский?) Сколько памяти у вас есть? Нужно ли упорядочивать полученную строку?
Разумно сохранять набор символов, которые вы уже видели при прохождении. Так что вы можете сортировать строку, а затем удалять дубликаты при ходьбе по строке, если вы можете изменить строку таким образом.
Если строка действительно длинная, вы хотите, чтобы время выполнения было близко к O (n), что означает сохранение установленного бита (как правило) или, в более редких случаях, хеш (если список возможных символов большой: Китайский?) Или тому подобное и отслеживание символов, которые вы видели, чтобы вы могли выселить их, когда вы ходите по струне. Здесь также есть много деталей реализации, связанных с тем, нужно ли вам сдвигать назад всю оставшуюся строку в памяти каждый раз, когда вы удаляете символ, или вы можете заменить его пустым или чем-то еще на месте.
Итак, опять же, зависит от того, чего вы пытаетесь достичь, и в какой среде вы находитесь.