Если букв ограниченное количество то можно использовать bitset, закодировав каждую букву в индекс бита.
Проходим, пересчитываем букву в индекс, проверяем текущий бит, выводим символ, записываем бит.
Решается за один проход.
Вместо bitset можно использовать массив бит или массив счетчиков букв.
Зависит еще от того, в какой кодировке текст, какое разнообразие букв и так далее.
Юникодная таблица должна уместиться в 20 килобайт.
Если же мы рассматриваем только русские(английские) буквы в нижнем регистре - то это 33(26) бит дополнительной памяти. Не учитывая вспомогательные обертки. Либо использовать UInt64(UInt32 для английских букв) как хранилище и битовой магией проверять и выставлять.