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

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

Задача 1#88151

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

Вложения к задаче
Показать ответ и решение
f = open(’24_M5.txt’)
mx = 0
temp_str = ’’#строка,в которую мы будем сохранять строку, подходящую по условию
count_A = 0
soglas = ’QWRTPSDFGHJKLZXCVBNM’
for i in range(1000):
    s = f.readline()
    c = 0
    count_A += s.count(’A’)#после того как определили букву,
    #считаем, сколько раз она встретилась в файле.
    for j in range(len(s)):
        if s[j] in soglas:#если текущий символ является согласной
            c += 1#то увеличиваем счётчик
            if c > mx:#если счётчик больше mx
                mx = c#то перезаписываем mx
                temp_str = s# в temp_str указываем текущую строку
        else:#в ином случае
            c = 0#обнуляем счётчик
d = {x:temp_str.count(x) for x in sorted(’AEUIOY’)}
#словарь, в котором в качестве ключа указана гласная буква,
#а в качестве значения - сколько раз она встречается в temp_str
print([x for x in d.keys() if d[x] == min(d.values())])#определяем букву, которая встречается реже всего
print(count_A)

Ответ: A 36465

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

Задача 2#88150

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

Вложения к задаче
Показать ответ и решение
f = open(’24_M5.txt’)
mx = 0
temp_str =’’#строка, в которую мы будем сохранять подходящую по условию нам строку
glas = ’AEIUOY’
soglas = sorted(’QWERTYUIOPASDFGHJKLZXCVBNM’)#изначально создали список всех букв
count_DD = 0
for x in glas:#проходимся по строке гласных и удаляем их из списка всех букв.
    #в этом списке останутся только согласные буквы
    soglas.remove(x)
for i in range(1000):
    s = f.readline().strip()#считываем строку, функция strip убирает символ переноса строки(\n)
    ans = s# копируем значение строки в ans для того чтобы позже,
    # в случае чего, её и сохранить в temp_str
    for x in soglas:#заменяем все согласные на один какой-то символ
        s = s.replace(x,’*’)
    s = s.split(’*’)#делаем по нему сплит
    for i in range(len(s)-1):#проходимся по списку s
        if len(’*’.join(s[i:i+2])) >= mx:#если длина подстроки с ровно одной согласной больше mx
            mx = len(’*’.join(s[i:i+2]))#то перезаписываем mx
            temp_str = ans# в temp_str передаём текущую строку
    count_DD += ans.count(’DD’)
    #после определения пары мы считаем, сколько раз она встретилась во всём файле
d = {x+y:temp_str.count(x+y) for x in sorted(set(temp_str)) for y in sorted(set(temp_str))}
# c помощью словаря
#мы создаем в ключах всевозможные пары символов,
# в значениях - мы считаем сколько раз встретилась такая пара рядом стоящих символов в temp_str
print([x for x in d.keys() if d[x] == max(d.values())])#выводим пару,
# которая встретилась больше всего раз
print(count_DD)#выводим количество раз встреченных DD в файле.

Ответ: DD 6305

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

Задача 3#88149

Текстовый файл содержит строку из заглавных латинских букв, всего не более чем из 106  символов. Определите максимальное количество подряд идущих символов, среди которых нет подстроки M?K? , где ? - обозначает один любой символ. В ответ укажите длину самой длинной подстроки.

Вложения к задаче
Показать ответ и решение
Способ решения 1:
s = open(’24_M4.txt’).readline()
alph = sorted(’QWERTYUIOPASDFGHJKLZXCVBNM’)
for x in alph:
    for y in alph:
        s = s.replace(’M’+x+’K’+ y,f’M{x}K {x}K{y}’)#заменяем всевозможные подстроки на тройки,
        # разделяя пробелом,
        # для того чтобы избежать четверку этих символов вместе
s = s.split()
print(max(len(x) for x in s))#вычисляем максимальную длину

Способ решения 2:
s = open(’24_M4.txt’).readline()
mx = 0
temp_str = s[:3]# добавляем изначально первые три символа из строки s в наращиваемую строку
for i in range(3,len(s)):
    if temp_str[-3] + temp_str[-1] != ’MK’:
        #если первый элемент из тройки(третий от конца temp_str) не равен M
        #и третий элемент из тройки(первый от конца temp_str) не равен K,
        #тогда можем добавлять в наращиваемую строку текущий символ
        temp_str += s[i]
        mx = max(mx,len(temp_str))#вычисляем максимальную длину
    else:#в ином случае
        mx = max(mx,len(temp_str))
        temp_str = temp_str[-2] + temp_str[-1] + s[i]#новая наращиваемая строка строится
        # из двух последних символа temp_str и текущего символа
print(mx)

Ответ: 5187

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

Задача 4#88148

Текстовый файл содержит строку из заглавных латинских букв, всего не более чем из 106  символов. Определите максимальное количество подряд идущих символов, среди которых нет подстроки KAZ? , где ? - обозначает один любой символ. В ответ укажите длину самой длинной подстроки.

Вложения к задаче
Показать ответ и решение
Способ решения 1:
s = open(’24_M4.txt’).readline()
alph = sorted(’QWERTYUIOPASDFGHJKLZXCVBNM’)
for x in alph:
    s = s.replace(’KAZ’ + x,f’KAZ AZ{x}’)#заменяем всевозможные комбинации на такие комбинации,
    # где данная четверка не находится вместе
s = s.split()#делаем сплит по пробелу
print(max(len(x) for x in s))#вычисляем максимальную длину

Способ решения 2:
s = open(’24_M4.txt’).readline()
mx = 0
temp_str = s[:3]#изначально в наращиваемую строку добавляем первых три элемента строки s
for i in range(3,len(s)):
    if temp_str[-3:] != ’KAZ’:#если последние три символа наращиваемой строки не равны KAZ,
        # то в наращиваемую строку мы можем добавить новый символ.
        temp_str += s[i]
        mx = max(mx,len(temp_str))#вычисляем максимум
    else:#в ином случае
        mx = max(mx,len(temp_str))
        temp_str = temp_str[-2]+temp_str[-1]+s[i]#мы образуем новую наращиваемую строку длиной 3,
        #из последних двух символов наращиваемой строки и текущего символа.
print(mx)

Ответ: 79634

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

Задача 5#88147

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

Вложения к задаче
Показать ответ и решение
s = open(’24_M3.txt’).readline().split(’.’)
alph = sorted(’QWERTYUIOPASDFGHJKLZXCVBNM’)
first_chapter = ’’.join(alph[:13])
second_chapter = ’’.join(alph[13:])
mx = 0
for i in range(1,len(s)-2):
    substr = ’.’.join(s[i:i+5])
    count_first = sum([substr.count(x) for x in first_chapter])
    count_second = sum([substr.count(x) for x in second_chapter])
    if count_first > count_second:
        mx = max(mx,len(substr))
print(mx)

Ответ: 441

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

Задача 6#88146

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

Вложения к задаче
Показать ответ и решение
s = open(’24_M3.txt’).readline()
for x in ’AEUIOY’:
    s = s.replace(x,’A’)#заменяем все гласные на какую-то одну гласную для удобства проверки
s = s.split(’.’)
mx = 0
for i in range(len(s)-6):
    substr = ’.’.join(s[i:i+7])#скрепляем элементы списка в строку,
    #между элементами списка будет символ точка
    if substr.count(’A’) > 15:
        mx = max(mx,len(substr))#вычисляем максимум
print(mx)

Ответ: 592

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

Задача 7#88145

Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите длину самой длинной подстроки, среди которой нет пары DA, но есть AD. В ответ укажите значение длины самой длинной подстроки, и через пробел общее количество подстрок, подходящих под условие.

Вложения к задаче
Показать ответ и решение
s = open(’24_M2.txt’).readline().replace(’DA’,’D A’).split(’ ’)#разделяем DA на D A и делаем сплит,
#таким образом, мы не удалим символы из файла
need_substrings = [x for x in s if ’AD’ in x]
#собираем в список все подстроки, которые нам подходят по условию
print(len(max(need_substrings,key = len)),len(need_substrings))#вычисляем длину самой длинной подстроки,
#а также общее количество подходящих по условию подстрок

Ответ: 5441 756

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

Задача 8#84151

Текстовый файл состоит из символов A,B, C,D,E, F  .

Определите в прилагаемом файле максимальное количество идущих подряд символов (длину непрерывной подпоследовательности), среди которых символ B  встречается ровно 53  раза.

Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
f = open(’24__3ns0t.txt’)
s = f.read()

s = s.split(’B’)
mx = -1

for i in range(len(s) - 53):
    new_s = ’’.join(s[i:i+54])
    mx = max(len(new_s) + 53, mx)

print(mx)

Ответ: 515

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

Задача 9#82933

Текстовый файл состоит из символов A, B, C, D и E. Определите в прилагаемом файле минимальное количество идущих подряд символов, cреди которых ровно две гласных буквы, при этом подстрока состоит не только из гласных букв.

Вложения к задаче
Показать ответ и решение
s = open(’24_13715.txt’).readline().replace(’A’,’*’).replace(’E’,’*’)
mn = 10**20
start = 0 if s[0] == ’*’ else 1
end = 0 if s[-1] == ’*’ else 1
s = s.split(’*’)
for i in range(start, len(s) - end):
    if len(s[i]) > 0:
        word = ’*’+s[i] + ’*’
        if len(word) < mn:
            mn = len(word)
print(mn)

Ответ: 3

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

Задача 10#82932

Текстовый файл состоит из символов A, B, C, D и E. Определите в прилагаемом файле максимальное количество идущих подряд символов, cреди которых не более одной гласной буквы.

Вложения к задаче
Показать ответ и решение
s = open(’24_13715.txt’).readline().replace(’A’,’*’).replace(’E’,’*’).split(’*’)
mx = 0
for i in range(len(s)-1):
    word = ’*’.join(s[i:i+2])
    mx = max(mx,len(word))
print(mx)

Ответ: 29

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

Задача 11#82931

Текстовый файл состоит из символов A, B, C, D и E. Определите в прилагаемом файле максимальное количество идущих подряд троек символов, удовлетворяющих виду: согласная буква + гласная буква + согласная буква.

Вложения к задаче
Показать ответ и решение
s = open(’24.txt’).readline()
cnt = mx = i = 0
while i < len(s) - 2:
    if s[i] in ’BCD’ and s[i + 1] in ’AE’ and s[i + 2] in ’BCD’:
        cnt += 1
        mx = max(mx, cnt)
        i += 3
    elif i > 1 and s[i - 2] in ’BCD’ and s[i - 1] in ’AE’and s[i] in ’BCD’:
        cnt = 1
        i += 1
    else:
        cnt = 0
        i += 1
print(mx)

Ответ: 5

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

Задача 12#82930

Текстовый файл состоит из символов A, B, C, D и E. Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых комбинация символов CD встречается ровно 50 раз.

Вложения к задаче
Показать ответ и решение
s = open(’24_13715.txt’).readline().replace(’CD’, ’C_D’).split(’_’)
mx = 0
for i in range(len(s)-50):
    word = ’’.join(s[i:i+51])
    mx = max(mx,len(word))
print(mx)

Ответ: 2085

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

Задача 13#82929

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. Определите максимальное количество подряд идущих пар, в которых содержится 1 буква и 1 цифра.

Вложения к задаче
Показать ответ и решение
s = open(’24_12946.txt’).readline()
cnt = mx = i = 0
digits = ’0123456789’
while i < len(s) - 1:
    if s[i] in digits and s[i + 1] not in digits or (s[i] not in digits and s[i + 1] in digits):
        cnt += 1
        mx = max(mx, cnt)
        i += 2
    elif i > 1 and (s[i - 1] in digits and s[i] not in digits or s[i - 1] not in digits and s[i] in digits):
        cnt = 1
        i += 1
    else:
        cnt = 0
        i += 1
print(mx)

Ответ: 17

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

Задача 14#80887

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых никакие две буквы из набора букв D, E и F (с учетом повторений) не записаны подряд.

Вложения к задаче
Показать ответ и решение
f = open(’24_19.txt’)
s = f.readline()
s = s.replace(’D’, ’*’).replace(’E’, ’*’).replace(’F’, ’*’)
while ’**’ in s:
    s = s.replace(’**’, ’* *’)
s = s.split()
print(max(map(len, s)))

Ответ: 428

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

Задача 15#80886

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

Вложения к задаче
Показать ответ и решение
f = open(’24_18.txt’)
s = f.readline()
mc = 0
for i in range (len(s)-1):
    cf, cl = 0, 0
    count = 0
    for j in range(i, len(s)):
        count += 1
        if s[j] == ’F’:
            cf += 1
        elif s[j] == ’L’:
            cl += 1
        if cf > 3 or cl > 3:
            mc = max(mc, count - 1)
            break
print(mc)

Ответ: 292

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

Задача 16#80885

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

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

Ответ: 40

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

Задача 17#80884

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

Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
f = open(’24_16.txt’)
s = f.readline()
mini = 10**10
count = 0
pos = []
for i in range(len(s)-1):
    if s[i] == ’Y’:
        pos.append(i)
for j in range(1, len(pos)-99):
    count=pos[j+99] - pos[j] + 1
    if count < mini:
        mini = count
print(mini)

Ответ: 108

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

Задача 18#80883

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

Для выполнения этого задания следует написать программу.

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

Ответ: 6

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

Задача 19#80882

Текстовый файл 24_14.txt состоит из символов T, U, V, W, X, Y и Z.

Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов T или V.

Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
f = open(’24_14.txt’)
s = f.readline()
k = 1
mx = 0
for i in range(1, len(s)):
    if (s[i] == ’T’ and s[i-1] == ’T’) or (s[i] == ’V’ and s[-1] == ’V’):
        k = 1
    else:
        k += 1
        if k > mx:
            mx = k
print(mx)

Ответ: 16

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

Задача 20#80881

Текстовый файл 24_13.txt состоит не более чем из 107  заглавных букв латинского алфавита. Определите максимальную длину подстроки, не содержащей в себе букв Y, J, I, N.

Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
f = open(’24_13.txt’)
s = f.readline()
for i in ’YJIN’:
    s = s.replace(i, ’ ’)
print(max(len(c) for c in s.split()))

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