📌 Проверка: является ли строка палиндромом?



Сложность: Лёгкая



Условие: палиндромом является фраза, которая после перевода в нижний регистр всех символов, а также удаления всех знаков препинания, читается одинаково как слева направо, так и справа налево.



Задача - вернуть true, если строка палиндром, false - в противном случае.



Пример:



Ввод: s = "A man, a plan, a canal: Panama"

Вывод: true

Объяснение: "amanaplanacanalpanama" является палиндромом.



Ввод: s = "race a car"

Вывод: false

Объяснение: "raceacar" не является палиндромом.



Ввод: s = " "

Вывод: true

Объяснение: s - пустая строка "" после удаления всех знаков препинания и пробелов.

Так как пустая строка читается одинаково в обоих направлениях, то она является палиндромом.



Решение с использвоанием регулярного выражения



import re



class Solution(object):

def isPalindrome(self, s):

new_s = re.sub(r"[^a-zA-Z0-9\\s+]", "", s).lower()

return new_s == new_s[::-1]




re.sub(pattern, replaceString): все совпадающие вхождения указанного шаблона заменяются, указанной строкой (здесь пустая строка, так как мы хотим удалить).



Давайте объясним шаблон:



[^ ]: Сопоставляет один символ, не присутствующий в списке ниже.

a-zA-Z: Сопоставляет все буквы верхнего и нижнего регистров.

0-9: совпадает с цифрами.

\s+: Сопоставляет строку символов, не являющихся пробелами.

Добавляем \, первый из которых "просит" Python не интерпретировать последующие.

Наконец, шаблон совпадает со всеми неалфавитными символами, а re.sub() позволяет нам удалить все встречающиеся символы из строки.



new_s[::-1] используется для переворачивания строки.



Пишите свое решение в комментариях👇



@python_job_interview