NK
как такую задачу решать?
Вообще, надо составить юнит-тесты. Это чтобы не пропереться с какой-нибудь последовательностью. А то можно алгоритм написать, а он какую-нибудь редкую последовательность неправильно обработает. Чтобы его изменить, надо будет проверять все последовательности заново. И так каждый раз при любой ошибке.
Ну, допустим, мы их составили. Дальше само решение:
Допустим, у нас исходные данные:
k = [1-5]
N = 19
Строка: 1222233334343333325
Тогда в ответе будет вся эта строка.
Ответ: 1222233334343333325
Нужно сделать пустое множество и при проходе по строке от её начала заполнять его походящими элементами. Когда множество заполнится всеми элементами, надо всю строку, которую рассматривали, сохранить. Затем надо повторить процедуру со второго символа. Когда множество заполнится, нужно сравнить по длине новую строку со строкой из предыдущего шага. Если новая строка короче, то её сохранить вместо предыдущей. Затем повторить всё с третьего символа. Когда дойдёшь до последнего символа, у тебя останется сохранённой самая короткая строка, содержащая все символы.