Приведите пример решения задачи Longest Palindromic Substring, используя расширение от центра, и объясните его ограничения и сложности.

Расширяйте палиндром от каждого символа и каждого промежутка между символами. Это даёт O(n²) времени в худшем случае и O(1) дополнительной памяти без учёта результата.

Короткий ответ

Что ответить на собеседовании

Расширяйте палиндром от каждого символа и каждого промежутка между символами. Это даёт 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]

Пустая строка возвращает пустую строку; при равенстве сохраняется первый найденный ответ. Для длинных однотипных строк квадратичная работа существенна — алгоритм Манакера позволяет получить линейное время.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее