Почему бы не использовать более простой алгоритм для этого вопроса, может быть не самый эффективный по времени, но он работает;):
шаг 1. (Предполагая, что мы имеем дело с набором символов из 26 алфавитов), создайте логический массив размера 26, просмотрите строку и проверьте логическое значение, соответствующее символу. Например, установите elem [0] = true, когда вы сталкиваетесь с a, elem [1] = true, когда вы сталкиваетесь с b и т. Д.
шаг 2. создайте строку, используя символы, где elem [x] = true. Итак, строка для этого случая будет "abcde" и ее длина = 5.
шаг 3. второй раз пройти по заданной строке, извлекая подстроки длиной 5, сортируя их в порядке возрастания и сопоставляя их со строкой из шага 2.