Расширяйте палиндром от каждого символа и каждого промежутка между символами. Это даёт O(n²) времени в худшем случае и O(1) дополнительной памяти без учёта результата.
Приведите пример решения задачи Longest Palindromic Substring, используя расширение от центра, и объясните его ограничения и сложности.
Расширяйте палиндром от каждого символа и каждого промежутка между символами. Это даёт O(n²) времени в худшем случае и O(1) дополнительной памяти без учёта результата.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Расширяйте палиндром от каждого символа и каждого промежутка между символами. Это даёт O(n²) времени в худшем случае и O(1) дополнительной памяти без учёта результата.
Нечётные и чётные палиндромы требуют разных центров. Храним только границы лучшего ответа, а срез создаём один раз.
def longest_palindrome(s):
start = end = 0
for center in range(len(s)):
for left, right in ((center, center), (center, center + 1)):
while left >= 0 and right < len(s) and s[left] == s[right]:
if right - left + 1 > end - start:
start, end = left, right + 1
left -= 1
right += 1
return s[start:end]
Пустая строка возвращает пустую строку; при равенстве сохраняется первый найденный ответ. Для длинных однотипных строк квадратичная работа существенна — алгоритм Манакера позволяет получить линейное время.