Есть ли логичный способ поиска дубликатов подстрок в строке, которая будет работать независимо от того, сколько раз дублируется подстрока; затем верните количество раз, которое было дублировано последним словом.Поиск дубликатов подстрок?
For example, abc-abc-abc-
Can be broken into | abc- | abc- | abc-
= abc- x3
Example 2, abc-abc-abc-abc-
Can be broken into | abc- | abc- | abc- | abc-
= abc- x4
Для четных повторов, это не проблема, чтобы разделить строку пополам, а затем сравнить обе подстроки. Затем вы можете продолжать цикл, пока половинки не совпадут.
Для нечетной длины строки вы можете разбить ее на 3rds и сравнить все три части и сделать то же самое.
Проблема возникает, когда слово повторяется 7 или 11 раз. Разделение длины на 4 или 5 могло бы работать.
Так, например, строка с yesnoyesnoyesnoyesnoyesnoyesnoyesno
имеет подстроку yesno
повторяющееся 7 times.
Есть ли какая-то формула, регулярное выражение или LINQ, которые могут превратить yesnoyesnoyesnoyesnoyesnoyesnoyesno
в yesno (x7)
?
Вы хотите самую длинную повторяющуюся подстроку? Могут ли быть другие строки между подстрокой? Как aaaaaabaaaaaa (x2 aaaaaa)? – brz
Если вам нужна самая длинная повторяющаяся подстрока, тогда 'abc-abc-abc-abc-' будет отображаться как 'abc-abc-x2' –
@AndrewShepherd Я спросил о' самой короткой' подстроке. Так что это можно разбить на 'abc-' – MCSharp