Два указателя

Самая длинная подстрока-палиндром

Найти самую длинную подстроку, которая является палиндромом

Средний

Постановка задачи

Описание (LeetCode)

Дана строка s. Верните самую длинную палиндромную подстроку в s.

Подстрока - это непрерывная часть строки. Палиндром - это строка, которая читается одинаково слева направо и справа налево.

Пример 1:

s = "babad"

Результат:

"bab"

Пояснение:

"aba" также является правильным ответом.

Пример 2:

s = "cbbd"

Результат:

"bb"

Ограничения:

  • 1 <= s.length <= 1000
  • s состоит только из цифр и английских букв.

Решение

На первый взгляд задача кажется простой: можно перебрать все подстроки и для каждой проверить, является ли она палиндромом. Такое решение легко придумать, но оно быстро становится слишком медленным.

Если строка длиной n, то подстрок будет O(n²). Проверка каждой подстроки на палиндром может занять еще O(n). В итоге получаем O(n³), что для строки длиной 1000 уже плохо.

Самая частая ошибка в этой задаче - начать с полного перебора подстрок и проверять каждую из них отдельно. На маленьких примерах это работает, но на интервью такой подход обычно сразу просят улучшить.

Перейдите на Premium, чтобы продолжить

Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium

Перейти на Premium