Палиндром — это строка, которая читается одинаково в обе стороны. Основные сложности связаны с чувствительностью к регистру и небуквенно-цифровыми символами (пробелы, пунктуация и т. д.).
Перед сравнением строку нужно нормализовать в два этапа:
Это гарантирует, что входные данные типа "A man, a plan, a canal: Panama" будут правильно определены как палиндромы.
def is_palindrome(s):
cleaned = ''.join(c for c in s if c.isalnum()).lower()
return cleaned == cleaned[::-1]
c.isalnum() отфильтровывает любой символ, который не является буквой или цифрой.lower() нормализует регистр, чтобы сравнение было без учёта регистраcleaned[::-1] использует срезы Python для разворота строкиTrue, если нормализованная строка равна своему разворотуO(n) — каждый символ обрабатывается один разO(n) — нормализованная строка хранится в памятиЭтот подход — чистый и идиоматичный Python. Разделяя нормализацию и сравнение, мы сохраняем читаемость кода и упрощаем его поддержку.
Метод isalnum() возвращает True для букв и цифр одновременно, что делает его идеальным для фильтрации строки палиндрома, чтобы оставить только символы, которые нужно сравнивать.
Новый — ещё не проверен сообществом
Вы