Два указателя
Самая длинная подстрока-палиндром
Найти самую длинную подстроку, которая является палиндромом
Постановка задачи
Описание (LeetCode)
Дана строка s. Верните самую длинную палиндромную подстроку в s.
Подстрока - это непрерывная часть строки. Палиндром - это строка, которая читается одинаково слева направо и справа налево.
Пример 1:
s = "babad"
Результат:
"bab"
Пояснение:
"aba" также является правильным ответом.
Пример 2:
s = "cbbd"
Результат:
"bb"
Ограничения:
1 <= s.length <= 1000sсостоит только из цифр и английских букв.
Решение
На первый взгляд задача кажется простой: можно перебрать все подстроки и для каждой проверить, является ли она палиндромом. Такое решение легко придумать, но оно быстро становится слишком медленным.
Если строка длиной n, то подстрок будет O(n²). Проверка каждой подстроки на
палиндром может занять еще O(n). В итоге получаем O(n³), что для строки
длиной 1000 уже плохо.
Самая частая ошибка в этой задаче - начать с полного перебора подстрок и проверять каждую из них отдельно. На маленьких примерах это работает, но на интервью такой подход обычно сразу просят улучшить.
Перейдите на Premium, чтобы продолжить
Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium
Перейти на Premium