Является ли строка палиндромом

Вводится строка. Определить, является ли она палиндромом, и вывести соответствующее сообщение. Палиндромом называется слово или фраза, которые читаются одинаково справа налево и слева направо.

Решение задачи на языке программирования Python

"Классический" алгоритм:

# ввод строки
s = input()

# длина строки
length = len(s)

# Находим длину половины строки делением нацело на 2.
# Если количество символов нечетно, то стоящий в середине
# не учитывается, т.к его сравниваемая пара - он сам.
half_length = length // 2

# количество итераций цикла равно длине половины строки
for i in range(half_length):
    # Если символ с индексом i не равен "симметричному"
    # символу с конца строки (который находится путем
    # индексации с конца),
    if s[i] != s[-1-i]:
        # то выводится сообщение, что строка не палиндром.
        print("It's not palindrome")
        # выход из программы
        quit()

# До этого места кода программа дойдет, если не произойдет
# выход из программы в цикле выше.
# Если выхода не произошло, значит строка - палиндром.
print("It's palindrome")

Примеры выполнения:

banana
It's not palindrome
anna
It's palindrome

Другой способ решения - перевернуть строку и сравнить ее с исходной. Если строки окажутся равными, мы имеем дело с палиндромом.

s = input()

s2 = ''
for i in s:
    s2 = i + s2

if s == s2:
    print('Палиндром')
else:
    print('Не палиндром')

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

Пользуясь возможностями языка Python, можно найти и другие способы решения задачи. Например, если передать строку в функцию reversed, из нее будет возвращен объект-итератор, генерирующий символы строки в обратном порядке. Если передать этот объект в строковый метод join, он проитерирует его и объединит символы в строку.

s = input()
s2 = ''.join(reversed(s))
print(s == s2)  # True - если палиндром, False - если нет.

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

s2 = s[::-1]


Решение задач на Python




Все разделы сайта