Предполагая, что это какое-то упражнение по программированию, я не хочу предоставлять сам код. Я предоставлю подсказки.
Как его можно изменить, чтобы получить также более короткие повторяющиеся непересекающиеся подстроки, начиная с подстрок длины x и заканчивая самой длинной подстрокой? (пробовал различные изменения, но так и не получил правильный результат).
Пожалуйста, дайте мне знать, если я вас правильно понимаю ...
Вы хотите получить все непересекающиеся самые длинные подстроки,да?
Первая проблема: неперекрывающаяся означает, что самая длинная подстрока может разрезать другие длинные подстроки. И наоборот. Поиск от самого длинного к x, а не от x до самого длинного.
Вторая проблема: что нас больше волнует - длина или количество строк?
Если мы заботимся только осамый длинный в текущий момент, вы можете:
- найти самое длинное совпадение
- , если его длина длиннее, чем хотелось бы
x
, сохранить его (иначе прекратить) - удалить все (? что если строка имеет, например, 3 повторения самого длинного, а не 2?) вхождения самой длинной строки из строки;держите некоторый разделитель на своем месте (потому что, например,
abbcacbb
имеет самую длинную подстроку bb
- простое удаление приведет к acac
, что дает ac
, что неверно) - повтор
Это в основном псевдокод, который нужно «перевести» в реальный код. Используйте while
цикл. ;)
Вам не нужно изменять данную функцию - как видите, пункт 1 использует ее как есть. Вам просто нужно получить результаты от нескольких вызовов этой функции. ;)