В этой проблеме есть два важных аспекта.
- Так как нам нужно S в качестве подстроки S2 + обратное (S2), S2, должны иметь по крайней мере N/2 длины.
- После конкатенации S2 и обратного (S2) есть образец, где алфавиты повторяет, такие как
Таким образом, решение, чтобы проверить от центра S до конца S для любых последовательных элементов.Если вы найдете его, проверьте элементы с обеих сторон, как показано на рисунке.
Теперь, если вы в состоянии достигнуть до конца строки, то минимальное количество элементов (результат) расстояние от начала до точки, где вы найдете последовательные элементы. В этом примере его C i.e 3.
Мы знаем, что это может случиться не всегда. т. е. вы не сможете найти последовательные элементы в центре. Скажем, последовательные элементы после центра, то мы можем сделать тот же тест.
Главная строка
Substring
каскадных строка
Теперь прибывает т он сильно сомневается. Почему мы рассматриваем только левую сторону, начиная с центра? Ответ прост, конкатенированная строка выполняется с помощью S + reverse (S). Таким образом, мы уверены, что последний элемент в подстроке происходит последовательно в конкатенированной строке. Нет никакого способа, чтобы любое повторение в первой половине основной строки могло дать лучший результат, потому что по крайней мере у нас должны быть n алфавитов в конечной конкатенированной строке
Теперь вопрос сложности: Поиск последовательных алфавитов дает максимум O (n) Теперь проверка элементов с обеих сторон итерационно может дать худшую сложность O (n). максимальные n/2 сравнения. Мы можем терпеть неудачу много раз, выполняя вторую проверку, так что у нас есть мультипликативная связь между сложностями i.e O (n * n).
Я считаю, что это правильное решение и еще не нашло лазейки.
Возможно ли решение O (n^3)? – Sayakiss
Нет, мне нужно решение лучше, чем O (n^3). – LTim