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

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

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

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

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

Текстовый файл 1-3.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых комбинация BU встречается больше трех раз.

Вложения к задаче
Показать ответ и решение
f = open(’D:/1-3.txt’)
a = f.readlines()
c = 0
for s in a:
    if s.count(’BU’) > 3:
        c += 1
print(c)

Ответ: 73

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

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

Текстовый файл 1-3.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых встречается комбинация G**T, где звёздочка обозначает любой символ.

Вложения к задаче
Показать ответ и решение
f = open(’D:/1-3.txt’)
a = f.readlines()
c = 0
for s in a:
    for i in range(len(s)-3):
        if s[i] == ’G’ and s[i+3] == ’T’:
            c += 1
            # строка уже подходит, пропускаем её
            break
print(c)

Ответ: 786

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

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

Текстовый файл 4.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Файл разбит на строки различной длины. В строках, содержащих более 50 букв N, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке.

Вложения к задаче
Показать ответ и решение
f = open(’D:/4.txt’)
a = f.readlines()
abc = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
c = 0
mx = 0
for s in a:
    if s.count(’N’) > 50:
        for i in abc:
            r = s.rfind(i) - s.find(i)
            mx = max(mx, r)
print(mx)

Ответ: 998

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’D:/5.txt’)
a = f.readlines()
# Алфавит, с помощью него будем вести перебор
abc = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’

# Сколько раз буква, встречающаяся реже всех, стоит после A
c = 0
# Длина самой длинной цепочки стоящих подряд одинаковых букв
mx = 0
# Строка, содержащая данную цепочку
mxs = ’’

# Поиск нужной строки путём перебора подстрок разных длин из одинаковых букв
for s in a:
    for l in abc:
        ts = l
        while ts in s:
            # Ставим ">=", чтобы в случае,
            # где максимальная длина уже встретилась,
            # мы учли позднюю строку
            if len(ts) >= mx:
                mx = len(ts)
                mxs = s
            ts += l

# Сколько раз встречается самая редкая буква
mn = 10**10
# Самая редкая буква
mnl = ’’
# Поиск самой редкой буквы
for l in abc:
    if mxs.count(l) <= mn:
        mn = mxs.count(l)
        mnl = l

# Сколько раз встречается после A во всём файле самая редкая буква
for s in a:
    c += s.count(’A’+mnl)

print(mnl, c)

Ответ: B1494

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’C:/24_6.txt’)
a = f.readlines()

# Ищем строку с наибольшим кол-вом O
mx = ’’
for s in a:
    if s.count(’O’) > mx.count(’O’):
        mx = s

# Перебираем пары вида "согласная+буква",
# тем самым находим букву, которая находится чаще после согласной
sg = ’BCDFGHJKLMNPQRSTVWXZ’
# Букву O не рассматриваем по условию
abc = ’ABCDEFGHIJKLMNPQRSTUVWXYZ’

mxl = ’’ # Искомая буква
mxc = 0 # Переменная, с помощью которой отслеживаем макс. частоту
for l1 in abc:
    c = 0
    for l2 in sg:
        c += mx.count(l2+l1)
    if c > mxc:
        mxc = c
        mxl = l1

# Во втором выражении мы соединили массив a в одну строку с помощью функции join(),
# чтобы легко найти количество появлений нужной буквы
print(mxl, (’’.join(a)).count(mxl))

Ответ: L38356

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

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

В текстовом файле 7.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите максимальную цепочку вида FDEFDE… (конец цепочки может быть неполным) и запишите в ответ длину цепочки.

Вложения к задаче
Показать ответ и решение
f = open(’C:/24_7.txt’)
a = f.readline()

s = ’’
# Смотрим, сколько полных подстрок FDE может быть
while s+’FDE’ in a:
    s += ’FDE’

# Добираем буквы для неполного конца цепочки
if s+’F’ in a:
    s += ’F’
    if s+’D’ in a:
        s += ’D’

print(len(s))

Ответ: 5

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

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

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

Вложения к задаче
Показать ответ и решение
s = open(’8.txt’).readline().replace(’BE’,’B E’).split(’ ’)
mx = 0
for i in s:
    if len(i) > mx:
        mx = len(i)
print(mx)

 

Ответ: 1024

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’C:/24_9.txt’)
a = f.readline()

# Воспроизводим три замены данных подцепочек,
# чтобы успешно найти третье вхождение с помощью rfind() (поиск элемента с конца строки)
a = a.replace(’BCCDA’, ’*****’, 3)

# Мы ищем символ после третьего вхождения, значит, берём индекс после подстроки
print(a[a.rfind(’*’)+1])

 

Ответ: B

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’C:/24_10.txt’)
s = f.readline()
maxi = 0

# По умолчанию будут подходить 4 символа,
# чтобы при выполнении первой проверки количество стало равно 5
k = 4

for i in range(0, len(s) - 4):
    x = s[i:i + 5]  # Срез 5 подряд идущих символов
    if len(set(x)) == 5:  # Если количество уникальных символов равно 5
        k += 1  # Добавляем к количеству новый крайний символ
        maxi = max(maxi, k)
    else:
        k = 4  # Сбрасываем счётчик до значения по умолчанию
print(maxi)

Ответ: 11

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

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

Текстовый файл содержит строку из заглавных латинских букв A, B, С, D, E и V, всего не более чем из 106  символов. Определите максимальное количество идущих подряд троек символов BDE или ACC (оба вида могут идти в произвольном порядке).

Вложения к задаче
Показать ответ и решение
# Решение через замены и сплит
s = open("24.txt").readline()
# Заменим сначала нужные нам комбинации на *
s = s.replace("BDE", "***").replace("ACC", "***").replace("A", "1").replace("B", "1").replace("C", "1") \
    .replace("D", "1").replace("E", "1").replace("V", "1").split("1")
# Затем оставшиеся буквы заменим на 1 и сделаем сплит по 1, чтобы ненужные буквы нам не мешались

# Делим на 3 значение потому что нам нужно узнать количество подряд идущих троек, а не символов
print(max(len(x) for x in s) // 3)



#Решение через циклы
s = open("24.txt").readline()
count = mx = 0
# Данный цикл нужен, потому что возможна ситуация, когда цепочка нужных нам комбинаций пройдёт мимо нас
# Во избежании этого мы пишем данный цикл
for k in range(3):
#Делаем шаг на 3 элемента,так как мы должны отслеживать тройки символов,
    # Если шаг поставить другой,то ответ будет некорректным
    for i in range(k, len(s)-2,3):
        if (s[i] + s[i+1] + s[i+2]) == "ACC" or (s[i] + s[i+1] + s[i+2]) == "BDE":
            count += 1
            if count > mx:
                mx = count
        else:
            count = 0
print(mx)

 

Ответ: 4

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

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

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

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

s = ""

while s in a:
    s += "F"

# -1, потому что при последнем действии в цикле прибавляется лишняя F,
# подстроку с которой программа в строке не видит 

print(len(s) - 1) 

 

Ответ: 6

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

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

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

Вложения к задаче
Показать ответ и решение
file = open(’3.txt’)
s = file.read()
temp_s = ’E’
while temp_s in s:
    if temp_s[-1] == ’E’:
        temp_s += ’A’
    elif temp_s[-1] == ’A’:
        temp_s += ’B’
    elif temp_s[-1] == ’B’:
        temp_s += ’E’
print(len(temp_s) - 1)

Ответ: 8

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

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

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

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

l = 2
mx = 2

for i in range(len(a)-2):
    if a[i] != a[i+1] and a[i] != a[i+2] and a[i+1] != a[i+2]:
        l += 1
        mx = max(mx, l)
    # Выставляем 2, потому что у нас сдвиг на 1 символ,
    # первый и второй символ мы уже ранее рассматривали
    else:
        l = 2
print(mx)

 

Ответ: 157

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("D:/5.txt")
a = f.readline()

abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

l = 1
mx = 1
for i in range(len(a)-1):
    if a[i] == a[i+1]:
        l += 1
        mx = max(mx, l)
    else:
        l = 1
print(mx)

for i in abc:
    if i*mx in a:
        print(i)

 

Ответ: 5DJKL

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("D:/6.txt")
a = f.readline()

ls = "BCE"
l = 0
mx = 0

for i in range(len(a)):
    if a[i] in ls:
        l += 1
        mx = max(mx, l)
    else:
        l = 0
print(mx)

 

Ответ: 31

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("C:/247.txt")
s = f.readline()

# l — текущая длина, ml — максимальная
l = 0
ml = 0
for i in range(len(s)):
# пока текущий символ не C,
    прибавляем 1 к длине текущей подстроки
    if s[i] != "C":
        l += 1
        # применяем данную функцию для выявления макс. строки
        ml = max(l, ml)
    else:
        l = 0
print(ml)

 

Ответ: 104

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("C:/248.txt")
s = f.readline()

# l — текущая длина, ml — максимальная
# ms — символ, из которого строится макс. цепочка
l = 1
ml = 1
ms = ""
for i in range(len(s)-1):
    # Сверяем текущий и последующий символы
    if s[i] == s[i+1]:
        l += 1
        # Если макс. длина обновляется, то сохраняем символ
        if l > ml:
            ms = s[i]
        ml = max(l, ml)
    # При несоответствии символов сбрасываем счётчик
    else:
        l = 1
print(ms, ml)

 

Ответ: 8 6

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("C:/24/1.txt")
s = f.readline()
l = 0
mxl = 0
for i in range(len(s)):
    if s[i] == "A" or s[i] == "B" or s[i] == "E":
        l += 1
        mxl = max(l, mxl)
    else:
        l = 0
print(mxl)

 

Ответ: 11

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("C:/24/2.txt")
s = f.readline()
l = 0
mxl = 0
d = "0123456789"
isDigit = False # True — цифра, False — буква
for i in range(len(s)):
    if (s[i] in d) == isDigit:
        l += 1
        mxl = max(l, mxl)
    else:
        l = 1
        if s[i] in d:
            isDigit = True
        else:
            isDigit = False
print(mxl)

 

Ответ: 19

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

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

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

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

a = "A"
while a in s:
    a += "A"

print(len(a)-1)

 

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