Задача к ЕГЭ по информатике на тему «поиск максимальной подстроки» №5

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

Примечание. Гласными в английском алфавите считать буквы A, E, I, U, O, Y.

f = open(’24.txt’)  # Открываем файл ’24.txt’ для чтения
mx = 0  # Максимальная длина
a = ’BCDFGHJKLMNPQRSTVWXZ’  # Набор согласных букв
# Проходим по каждой строке в файле
for j in f:
    s = j  # Присваиваем текущую строку переменной s
# Заменяем все согласные из набора ’a’ на ’*’
    for i in a:
        s = s.replace(i, ’*’)
# Разбиваем строку по символу ’*’ и вычисляем длины сегментов
    t = list(map(len, s.split(’*’)))
# Находим максимальную длину двух последовательных сегментов
    mx_len = max(t[i] + t[i + 1] + 1 for i in range(len(t) - 1))
    # Если максимальная длина равна 15, выводим строку
    if mx_len == 15:
        print(j)

Находим наиболее часто встречающуюся пару в найденной строке:

a1 = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’  # Алфавит английских букв
# Исходная строка для поиска
s = ’XGOORRQQGIHHVWOOOHXXRAGEGIIDDECYAAEYLLDBNGZZWJRHUVVQLSSRYYYOONNNPPJSSUE...’

# Два вложенных цикла для генерации всех возможных пар букв из алфавита
for i in a1:
    for j in a1:
        t = i + j  # Формируем пару букв
        c = 0  # Счетчик для подсчета вхождений пары в строке s
        # Проходим по строке s, проверяя каждую подстроку длиной 2
        for k in range(len(s)-1):
            if s[k:k+2] == t:  # Если текущая подстрока совпадает с парой t
                c += 1  # Увеличиваем счетчик
            if c == 16:  # Если пара встречается 16 раз
                print(t)  # Выводим найденную пару

Это пара DD. Окончательно найдем количество пар DD в файле:

f = open(’24.txt’)  # Открываем файл ’24.txt’ для чтения
c = 0  # Инициализируем счетчик для подсчета вхождений ’DD’
# Проходим по каждой строке в файле
for i in f:
    s = i  # Присваиваем текущую строку переменной s
    # Проходим по строке, проверяя каждую подстроку длиной 2
    for k in range(len(s)-1):
        if s[k:k+2] == ’DD’:  # Если текущая подстрока равна ’DD’
            c += 1  # Увеличиваем счетчик
print(c)  # Выводим общее количество вхождений ’DD’

Ответ: DD 7657
Оцените статью
Я решу все!