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

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

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

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

Задача 41#29910Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  цифр от 0 до 9. Найдите самую длинную последовательность, цифр одной четности.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_38_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
# Открываем файл и читаем его содержимое
f = open("Задание_38_ДЗ.txt")
s = f.read()

# Инициализируем переменные
maxim, counter = 0, 1  # maxim — максимальная длина последовательности, counter — текущая длина

# Проходим по всем символам строки, кроме последнего
for i in range(len(s) - 1):
    # Проверяем, четные ли оба символа (текущий и следующий)
    if int(s[i]) % 2 == int(s[i + 1]) % 2:
        counter += 1  # Увеличиваем счетчик, если они имеют одинаковую четность
        maxim = max(maxim, counter)  # Обновляем максимальную длину последовательности
    else:
        counter = 1  # Сбрасываем счетчик, если четность различается

# Выводим максимальную длину последовательности одинаковой четности
print(maxim)

Ответ: 27

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

Задача 42#29911Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите длину максимальной неубывающей подпоследовательности символов по таблице ASCII.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_39_ДЗ". В ответе запишите длину искомой подпоследовательности.

Вложения к задаче
Показать ответ и решение
# Открываем файл и читаем его содержимое
f = open("Задание_39_ДЗ.txt").read()

# Инициализируем переменные
maxim = 0  # Переменная для хранения максимальной длины неубывающей подпоследовательности
count = 1  # Переменная для подсчета текущей длины последовательности

# Проходим по всем символам строки, кроме последнего
for i in range(len(f) - 1):
    # Проверяем, не убывает ли последовательность по таблице ASCII
    if f[i] <= f[i + 1]:
        count += 1  # Увеличиваем счетчик, если текущий символ меньше или равен следующему
        maxim = max(count, maxim)  # Обновляем максимальную длину, если текущая больше
    else:
        count = 1  # Сбрасываем счетчик на 1, если последовательность убывает

# Выводим максимальную длину неубывающей подпоследовательности
print(maxim)

 

Ответ: 10

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

Задача 43#29912Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD...  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_40_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
# Открываем файл и читаем его содержимое
f = open("Задание_40_ДЗ.txt")
s = f.read()  # Считываем все символы из файла в строку s

# Инициализируем переменные
count = 1  # Счетчик текущей длины последовательности
maxim = 0  # Переменная для хранения максимальной длины последовательности

# Проходим по всем символам строки, кроме последнего
for i in range(len(s) - 1):
    # Проверяем, является ли текущий символ предшественником следующего в алфавите
    if ord(s[i]) == ord(s[i + 1]) - 1:
        count += 1  # Увеличиваем счетчик, если символы идут в алфавитном порядке
        maxim = max(maxim, count)  # Обновляем максимальную длину последовательности
    else:
        count = 1  # Сбрасываем счетчик на 1, если последовательность нарушена

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

 

Ответ: 5

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

Задача 44#29913Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите последовательность максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII. Пример подходящей последовательности: BABACADB  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_41_ДЗ". В ответе запишите длину искомой последовательности.

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

Решение 1.

s = open("Задание_41_ДЗ__tcne.txt").read()
counter = 1
fl = True # Ждем больше
ans = 0
for i in range(len(s) - 1):
    if s[i] > s[i + 1] and fl:
     # Ждали больше, нашли больше
        counter += 1
        fl = False # Ждем меньше
    elif s[i] < s[i + 1] and not fl:
     # Ждали меньше, нашли меньше
counter += 1
        fl = True # Ждем больше
    elif s[i] > s[i + 1] and not(fl):
     # Ждали меньше, нашли больше (получается больше больше)
        # Для ситуации CBAB, ждали меньше, получили больше, учитываем
        # вторую пару больше как начало новой последовательности,
        # флаг можно не менять, так как он уже ждет меньше
        counter = 2
    elif s[i] < s[i + 1] and fl:
     # Ждали больше, нашли меньше
        # Флаг можно не менять, так как он уже ждет меньше
        counter = 1
    else:
        counter = 1
    ans = max(counter, ans)
print(ans)

Решение 2. В данном решении надо отдельно рассмотреть последний символ глазами.

with open(’Задание_41_ДЗ.txt’) as f:
    text = f.read().strip()

max_seq_len = 0
for i in range(len(text)):
    seq_len = 1
    for j in range(i+1, len(text)):
        if (j-i) % 2 == 1 and ord(text[j]) > ord(text[j-1]) or \
           (j-i) % 2 == 0 and ord(text[j]) < ord(text[j-1]):
            seq_len += 1
        else:
            break
    max_seq_len = max(max_seq_len, seq_len)

print(max_seq_len+1)

Решение 3.

with open(’Задание_41_ДЗ.txt’) as f:
    text = f.read().strip() + "-"

seq_len = 1
max_seq_len = 0
for i in range(1, len(text) - 1, 2):
    if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-":
        seq_len += 2
        max_seq_len = max(max_seq_len, seq_len)
    else:
        if text[i - 1] > text[i]:
            seq_len += 1
            max_seq_len = max(max_seq_len, seq_len)
        seq_len = 1

for i in range(2, len(text) - 1, 2):
    if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-":
        seq_len += 2
        max_seq_len = max(max_seq_len, seq_len)
    else:
        if text[i - 1] > text[i]:
            seq_len += 1
            max_seq_len = max(max_seq_len, seq_len)
        seq_len = 1
print(max_seq_len)

Ответ: 32

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

Задача 45#29915Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Возрастающей последовательностью называется последовательность, элементы которой идут строго в порядке увеличения id по таблице ASCII. Найдите максимальную возрастающую последовательность символов.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_43_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
# Открываем файл и читаем его содержимое
f = open(’Задание_43_ДЗ.txt’)
s = f.read()  # Считываем все символы из файла в строку s

# Инициализируем переменные
count = 1  # Счетчик текущей длины возрастающей последовательности
maxim = 0  # Переменная для хранения максимальной длины последовательности

# Проходим по всем символам строки, кроме последнего
for i in range(len(s) - 1):
    # Проверяем, идет ли текущий символ перед следующим в порядке увеличения по ASCII
    if s[i] < s[i + 1]:
        count += 1  # Увеличиваем счетчик, если символы идут в порядке возрастания
        maxim = max(maxim, count)  # Обновляем максимальную длину последовательности
    else:
        count = 1  # Сбрасываем счетчик на 1, если последовательность нарушена

# Выводим максимальную длину возрастающей последовательности символов
print(maxim)

Ответ: 9

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

Задача 46#29922Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  символов ’(’ и ’)’. Известно, что правильная скобочная последовательность берет начало в начале файла. Вам необходимо узнать какую максимальну длину имеет правильная скобочная последовательность. Правильная скобочная последовательность - последовательность скобок, которая подчиняется нескольким правилам:

1) Последовательность начинается с открывающейся скобки

2) Каждая открывающаяся скобка имеет в пару закрывающаяся скобку

3) Количество открывающихся скобок в любой точке скобочной последовательности больше либо равно количеству закрывающихся

Примеры правильных скобочных последовательностей: ()()()  , ()(()())  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_50_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_50_ДЗ.txt’)  
s = f.read()  
count_left = 1  
count_right = 0  
for i in range(1, len(s)):  
    if s[i] == ’(’:  
        count_left += 1  
    else:  
        if count_left > count_right:  
            count_right += 1  
        else:  
            break  
print(count_right + count_left)

Ответ: 10084

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

Задача 47#33620Максимум баллов за задание: 1

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

Текстовый файл состоит из символов S, R, O. Определите максимальную длину подстроки, состоящей из троек символов OSR или RSO. Искомая подстрока может включать только тройки OSR, только тройки RSO или содержать одновременно как тройки OSR, так и тройки RSO. Тройки не могут пересекаться.

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

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

Считаем строку из файла, введём переменную для подсчёта максимального числа троек подряд. Будем срезать по 3 тройки символов и проверять, подходят ли они нам, поскольку мы проверяем тройки - идти по строке будем с шагом 3. Если тройка не подошла - запишем, что уже нашли, далее обнулим счётчик. Пройдёмся по строке начиная с 0, 1 и 2 символа. Это исключит возможность потери каких-либо комбинаций троек. Ответ умножим на 3, чтобы получить количество символов, а не самих троек.

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

# mx - максимальное количество подряд идущих троек (OSR или RSO)
mx = 0

# Перебираем 3 возможных начальных позиции (0, 1, 2)
for k in range(0, 3):
    # c - счетчик текущей последовательности троек
    c = 0
    # Проходим по строке с шагом 3, начиная с позиции k
    for i in range(k, len(s), 3):
        # Проверяем текущую тройку символов
        if s[i:i + 3] in ["RSO", "OSR"]:
            # Если тройка подходит, увеличиваем счетчик
            c += 1
            # Обновляем максимальное значение
            mx = max(c, mx)
        else:
            # Если тройка не подходит, сбрасываем счетчик
            c = 0

# Умножаем на 3, чтобы получить длину в символах (а не в тройках)
print(mx * 3)

Ответ: 15

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

Задача 48#48788Максимум баллов за задание: 1

В текстовом файле 2.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов E.

Вложения к задаче
Показать ответ и решение
f = open(’2.txt’)
s = f.read()
max_size_substring = 0
temp_size = 0
for i in range(len(s)):
    if s[i] == ’E’:
        temp_size += 1
        max_size_substring = max(max_size_substring, temp_size)
    else:
        temp_size = 0
print(max_size_substring)

Ответ: 7

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

Задача 49#48790Максимум баллов за задание: 1

В текстовом файле 3.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов B, C или D (в произвольном порядке).

Вложения к задаче
Показать ответ и решение
f = open(’3.txt’)
s = f.read()
max_size_substring = 0
temp_size = 0
for i in range(len(s)):
    if s[i] in ’BCD’:
        temp_size += 1
        max_size_substring = max(max_size_substring, temp_size)
    else:
        temp_size = 0
print(max_size_substring)

Ответ: 28

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

Задача 50#48795Максимум баллов за задание: 1

В текстовом файле 4.txt. находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, не содержащей символа A.

Вложения к задаче
Показать ответ и решение
f = open(’4.txt’)
s = f.read()
max_size_substring = 0
temp_size = 0
for i in range(len(s)):
    if s[i] != ’A’:
        temp_size += 1
        max_size_substring = max(max_size_substring, temp_size)
    else:
        temp_size = 0
print(max_size_substring)

Ответ: 175

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

Задача 51#48797Максимум баллов за задание: 1

В текстовом файле 5.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из символов одной группы (буквы или цифры).

Вложения к задаче
Показать ответ и решение
f = open(’5.txt’)
s = f.read()
max_size_substring = 0
temp_size_alf = 0
temp_size_numbers = 0
for i in range(len(s)):
    if s[i] in ’0123456789’:
        temp_size_numbers += 1
        temp_size_alf = 0
        max_size_substring = max(max_size_substring, temp_size_numbers)
    else:
        temp_size_alf += 1
        temp_size_numbers = 0
        max_size_substring = max(max_size_substring, temp_size_alf)
print(max_size_substring)

Ответ: 19

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

Задача 52#48798Максимум баллов за задание: 1

В текстовом файле 6.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину последней самой длинной подцепочки, состоящей из одинаковых символов. Выведите сначала символ, из которого строится цепочка, а затем без пробела – длину этой цепочки.

Вложения к задаче
Показать ответ и решение
f = open(’6.txt’)
s = f.read()
max_size_substring = 1
temp_size_substring = 1
max_symbol = ’’
for i in range(len(s) - 1):
    if s[i] == s[i + 1]:
        temp_size_substring += 1
    else:
        temp_size_substring = 1
    if temp_size_substring >= max_size_substring:
        max_size_substring = temp_size_substring
        max_symbol = s[i]
print(max_symbol, max_size_substring, sep="")

Ответ: 55

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

Задача 53#48800Максимум баллов за задание: 1

Текстовый файл 7.txt состоит не более чем из 106  символов. Определите максимальное количество идущих подряд символов, среди которых каждые три подряд идущих символа различны между собой.

Вложения к задаче
Показать ответ и решение
f = open(’7.txt’)
s = f.read()
max_size_substring = 2
temp_size_substring = 2
for i in range(len(s) - 2):
    if s[i] != s[i + 1] and s[i + 1] != s[i + 2] and s[i] != s[i + 2]:
        temp_size_substring += 1
        max_size_substring = max(max_size_substring, temp_size_substring)
    else:
        temp_size_substring = 2
print(max_size_substring)

Ответ: 69

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

Задача 54#48802Максимум баллов за задание: 1

В текстовом файле 8.txt находится цепочка из символов, в которую могут входить заглавные буквы латинского алфавита A…Z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов. Найдите все цепочки максимальной длины. В ответе запишите: максимальную длину и все символы, из которых состоят цепочки максимальной длины, в алфавитном порядке. Все в ответе записывайте без пробелов. Пример. Максимальная длина 3 и нашлось 3 цепочки такой длины BBB, AAA, CCC. В ответе запишем: 3ABC

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

f = open(’8.txt’)
s = f.read()
max_size_substring = 1
temp_size_substring = 1
# Создали список английских букв
alf = list(string.ascii_uppercase)
counter_alf = [0] * 26
old_symbol = ’’
for i in range(len(s)):
    if s[i] == old_symbol:
        temp_size_substring += 1
    else:
        temp_size_substring = 1
        old_symbol = s[i]
    if temp_size_substring >= max_size_substring:
        max_size_substring = temp_size_substring
        # Заполняем список максимального количества определенной буквы
        counter_alf[alf.index(old_symbol)] = max_size_substring
max_counter = max(counter_alf)
print(max_counter, end="")
for i in range(len(counter_alf)):
    if counter_alf[i] == max_counter:
        print(alf[i], end="")

Ответ: 6FGM

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

Задача 55#48805Максимум баллов за задание: 1

В текстовом файле 10.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите максимальную цепочку вида CD...CD и запишите в ответ сначала длину цепочки, а следом без пробела саму цепочку.

Вложения к задаче
Показать ответ и решение
f = open(’10.txt’)
s = f.read()
max_counter = 0
for start_step in range(2):
    temp_counter = 0
    for i in range(start_step, len(s) - 1, 2):
        if s[i] + s[i + 1] == "CD":
            temp_counter += 2
            max_counter = max(max_counter, temp_counter)
        else:
            temp_counter = 0
print(max_counter, "CD" * (max_counter // 2), sep="")

Ответ: 6CDCDCD

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

Задача 56#49388Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  символов A  , B  и C  . Определите максимальное количество идущих подряд символов B  . Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.

Вложения к задаче
Показать ответ и решение
a = open(’24.txt’).readline()
k = 0
mx = 0
for i in range(len(a)):
    if a[i] == ’B’:
        k += 1
    else:
        k = 0
    mx = max(mx, k)
print(mx)

Ответ: 11

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

Задача 57#52989Максимум баллов за задание: 1

В текстовом файле 2.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов B.

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()#Считываем файл
max_size = 0
temp_size = 0
for i in range(len(s)):#Проходимся по строке
    if s[i] == ’B’:#Если текущий элемент равен B,то увеличиваем счётчик текущей комбинации на 1
        temp_size += 1
        max_size = max(max_size, temp_size)
    else:
        temp_size = 0#В ином случае, мы обнуляем счётчик текущей комбинации
print(max_size)

Ответ: 13

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

Задача 58#52990Максимум баллов за задание: 1

В текстовом файле 3.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов A, B или E (в произвольном порядке).

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
max_size = 0
temp_size = 0
for i in range(len(s)):
    if s[i] in "ABE":
        temp_size += 1
        max_size = max(max_size, temp_size)
    else:
        temp_size = 0
print(max_size)

Ответ: 29

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

Задача 59#52991Максимум баллов за задание: 1

В текстовом файле 4.txt. находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, не содержащей символа D.

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
max_size = 0
temp_size = 0
for i in range(len(s)):
    if s[i] != ’D’:
        temp_size += 1
        max_size = max(max_size, temp_size)
    else:
        temp_size = 0
print(max_size)

Ответ: 21

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

Задача 60#52992Максимум баллов за задание: 1

В текстовом файле 5.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из символов одной группы (буквы или цифры).

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
max_size = 0
temp_size_numbers = 0
temp_size_alf = 0
numbers = "0123456789"
for i in range(len(s)):
    if s[i] in numbers:
        temp_size_numbers += 1
        max_size = max(max_size, temp_size_numbers)
        temp_size_alf = 0
    else:
        temp_size_alf += 1
        max_size = max(max_size, temp_size_alf)
        temp_size_numbers = 0
print(max_size)

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