Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Питон, помогите пожалуйста

Палиндромом называется слово, которое одинаково читается как слева направо, так и справа налево, например, в английском языке такими словами являются «radar» и «racecar». Света изучает английский язык и решила принять участие в дистанционном конкурсе знатоков английского языка. Но, когда она писала ответ на задание «найдите самое длинное слово, которое является палиндромом», ошиблась и нажала на клавиатуре одну лишнюю клавишу. Определите, какую букву нужно удалить в набранном Светой слове, чтобы это слово стало палиндромом.

ВХОДНЫЕ ДАННЫЕ

Программа получает на вход строку из строчных английских букв, содержащую не менее 2 и не более 100 000 символов.

ВЫХОДНЫЕ ДАННЫЕ

Программа должна вывести единственное число – номер буквы в строке, при удалении которой слово становится палиндромом. Если при удалении любой буквы слово не станет палиндромом, программа должна вывести число 0.

ПРИМЕРЫ

ВВОД
raceczcar

ВЫВОД
6

ВВОД
car

ВЫВОД
0

По дате
По рейтингу
Аватар пользователя
Новичок

s = input()
i = 0
j = len(s) - 1
while i < j and s[i] == s[j]:
i += 1
j -= 1
if i >= j:
print(i + 1)
elif s[:i] + s[i + 1:] == (s[:i] + s[i + 1:])[::-1]:
print(i + 1)
elif s[:j] + s[j + 1:] == (s[:j] + s[j + 1:])[::-1]:
print(j + 1)
else:
print(0)

Аватар пользователя
Новичок
1нед

вот простое решение:
""def is_palindrome(s, left, right):

while left < right:

if s[left] != s[right]:

return False

left += 1

right -= 1

return True

def find_removal_index(s):

left, right = 0, len(s) - 1

while left < right:

if s[left] != s[right]:

if is_palindrome(s, left + 1, right):

return left + 1 # +1, т.к. индексация с 1

elif is_palindrome(s, left, right - 1):

return right + 1

else:

return 0

left += 1

right -= 1

return 0 # Уже палиндром

s = input().strip()

print(find_removal_index(s))""