Тема 24. Обработка символьной информации

24.03 Прочие прототипы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка символьной информации
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#37826

В единственной строке файла 24.txt находится строка s  состоящая не более чем из 107  маленьких букв английского алфавита. Определите можно ли добавить некоторое(возможно нулевое) количество букв «a» в начало строки, чтобы строка стала палиндромом.

Напомним вам, что палиндромом называются строки, которые читаются одинаково как слева-направо, так и справа-налево.

В ответ запишите наименьшее необходимое количество букв «a», а если строку s невозможно сделать палиндромом проделывая описанную операцию — запишите в ответ − 1  .

Вложения к задаче
Показать ответ и решение
S = open("24.txt").readline()

# Проверка, является ли исходная строка палиндромом
if S == S[::-1]:  # S[::-1] - срез переворачивания строки
    print(0)  # Выводим необходимое количество букв ’a’, то есть 0
else:  # Иначе нужно попробовать дописать в начало строки буквы ’a’
    left_count_a = 0  # Счётчик для букв ’a’ слева
    right_count_a = 0  # Счётчик для букв ’a’ справа

    for i in range(len(S) // 2):
        # Пока слева будут идти буквы ’a’, будем увеличивать счётчик
        if S[i] == ’a’:
            left_count_a += 1
        # В ином случае остановим цикл
        else:
            break
    # Аналогично с буквами ’a’ с правого конца строки
    for i in range(len(S) // 2):
        if S[-i - 1] == ’a’:
            right_count_a += 1
        else:
            break

    # Если слева букв ’a’ меньше, чем справа,
    # то можно добавить недостающеее количество букв ’a’ слева
    if left_count_a <= right_count_a:
        S = ’a’ * (right_count_a - left_count_a) + S
    # В ином случае при дописывании слева букв ’a’
    # строка никогда не станет палиндромом,
    # так как справа букв ’a’ меньше

    # В итоге проверим, стала ли строка палиндромом
    if S == S[::-1]:
        # Выводим необходимое количество букв ’a’
        print(right_count_a - left_count_a)
    else:
        # Выводим -1, что означает,
        # что строку нельзя сделать палиндромом таким образом
        print(-1)

Ответ: 1483099

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!