Как ответить
На собеседовании по алгоритмам проверки строки на палиндром важно не просто назвать готовую функцию, а показать, как вы напишете её сами. Для простой проверки в Python можно использовать срез s == s[::-1], но это подходит только для строк без учёта регистра и пробелов. В продакшене часто используют однострочные решения, однако в вопросе интервьюер ожидает понимания алгоритма.
Я бы написал функцию, которая сначала нормализует строку: приводит к нижнему регистру и убирает небуквенные символы. Затем проверяю двумя способами:
- Сравнение с обратной строкой: после очистки сравниваем строку с её обратной версией (
cleaned == cleaned[::-1]). Просто, но память O(n). - Два указателя: идём слева и справа, посимвольно сравниваем. Это даёт O(1) дополнительной памяти и O(n) времени.
Вот пример на Python с двумя указателями:
def is_palindrome(s):
left, right = 0, len(s) - 1
while left < right:
while left < right and not s[left].isalnum():
left += 1
while left < right and not s[right].isalnum():
right -= 1
if s[left].lower() != s[right].lower():
return False
left += 1
right -= 1
return TrueТакже стоит обсудить edge cases: пустая строка, строки с одним символом, строки, содержащие только пробелы. Для работы с Unicode можно использовать str.casefold() вместо lower().