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

24.01 Поиск максимальной подстроки

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

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

Задача 1#27467

Задание выполняется с использованием прилагаемых файлов

Текстовый файл содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 106  символов. Запишите в ответе наибольшую (по длине) неубывающую подпоследовательность цифр. Если таких последовательностей несколько, запишите первую из них.

Вложения к задаче
Показать ответ и решение

Решение через цикл:

Считаем файл. Заменим все буквы на звёзды и разделим по ним строки, таким образом у нас остались лишь непрерывные последовательности цифр. Пройдёмся по каждой последовательности и найдём максимальную неубывающую. Если нашлась последовательность больше, чем была ранннее - вырезаем её и записываем в переменную. Остаётся вывести полученную строку.

# Все буквы английского алфавита (заглавные и строчные)
a = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"

# Читаем строку из файла
s = open("24ege.txt").readline()

# Заменяем все буквы на звездочки
for i in a:
    s = s.replace(i, "*")

# Разбиваем строку на части по звездочкам - получаем список из цифровых последовательностей
s = s.split("*")

# mx_count - максимальная длина неубывающей последовательности
mx_count = 1
# s1 - самая длинная неубывающая последовательность цифр
s1 = ""

# Проходим по каждой цифровой последовательности
for x in s:
    # count - счетчик длины текущей неубывающей последовательности
    count = 1
    # Проходим по цифрам в текущей последовательности
    for i in range(len(x) - 1):
        # Проверяем, что текущая цифра <= следующей (неубывание)
        if x[i] <= x[i + 1]:
            count += 1
            # Если нашли более длинную последовательность
            if count > mx_count:
                mx_count = count
                # Вырезаем найденную последовательность
                s1 = x[i + 2 - count:i + 2]
        else:
            # Последовательность нарушилась - сбрасываем счетчик
            count = 1

# Выводим первую самую длинную неубывающую последовательность цифр
print(s1)

Ответ: 17

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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