E. А роза упала на лапу Азора 4.0

Вернёмся к палиндромам — числам, словам и предложениям, которые читаются одинаково в оба направления.
Напишите программу, которая определяет, относится ли введённая строка к палиндромам.

Формат ввода

Вводится строка.

Формат вывода:

Требуется вывести YES — если введенная строка является палиндромом, иначе – NO.

Пример

Ввод

мама

Вывод

NO

Ввод

анна

Вывод

YES

Решение

Задача решается ровно так же, как и Q. А роза упала на лапу Азора 3.0 с той лишь разницей, что там мы разворачивали число, а тут надо развернуть строку. С помощью срезов это можно сделать в одну операцию и на даже не потребуется дополнительная переменная.

В силу того, что Python язык интерпретируемый попытка решить эту задачу через цикл и сравнение первого и последнего, второго и предпоследнего и так далее символов окажется существенно медленней чем работа со срезами. Хотя для большинства компилируемых языков, все будет ровно наоборот.

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

Этот прием можно использовать не только для строк, а для любого итерируемого объекта.

Ниже представлены оба варианта решения задачи.

Обратите внимание на использование знака ~ в индексации строки при проверке в первом варианте решения. Он означает элемент противоположный данному и позволяет избежать записи string[-1 – pos]. Согласитесь, что string[~pos] выглядит немного элегантнее.

Посмотреть код

Решение

Python
# Классическое сравнение

string = input()

palindrome = True

for pos in range(len(string) // 2):
    if string[pos] != string[~pos]:
        palindrome = False
        break

if palindrome:
    print('YES')
else:
    print('NO')

Решение

Python
# Срезы

string = input()

if string == string[::-1]:
    print('YES')
else:
    print('NO')
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Никита
Никита
04.12.2024 21:03

str = input()

list = list(str)
list_copy = list.copy()
list.reverse()

if list == list_copy:
    print(‘YES’)
else:
    print(‘NO’)

Совсем про срезы забыл. Мне кажется, и мой вариант можно было оптимизировать. Но у меня без копирования списка не получилось