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

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

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

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из рядом стоящих символов M, т.е. в последовательности VVMMVDVVVVMDMVDVVVV такой последовательностью будет MM.

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

Вложения к задаче
Показать ответ и решение
# Читаем весь текст из файла
s = open("177.txt").readline()

# Здесь будем хранить самую длинную цепочку из M
ans = 0
# Счетчик для текущей цепочки M
count = 1

# Проходим по всем символам в тексте
for i in range(len(s) - 1):
    # Если два подряд идущих символа - это M
    if s[i] == s[i + 1] and s[i] == "M":
        count += 1  # Увеличиваем счетчик цепочки
        # Запоминаем максимальную длину
        if count > ans:
            ans = count
    else:
        # Цепочка прервалась - начинаем считать заново
        count = 1

# Выводим ответ - длину самой длинной цепочки M
print(ans)

Ответ: 2

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из символов M, стоящих через 1 элемент (разница в индексе равна 2), т.е. в последовательности MVDMVMM такой последовательностью будет MVD(M)V(M)M.

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

Вложения к задаче
Показать ответ и решение
s = open("Задача 8.txt").read()
maxim =  0
for i in range(2):
    count = 1
    for j in range(i, len(s) - 2, 2):
        if s[j] == s[j + 2] and s[j] == "M":
            count += 1
            maxim = max(count, maxim)
        else:
            count = 1
print(maxim)

Ответ: 6

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите длины самой длинной последовательности одинаковых элементов и самой длинной последовательности разных элементов, т.е. в последовательности MVDMVMMDM такими последовательностями будут MM и MVDMVM.

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

Вложения к задаче
Показать ответ и решение
s = open("Задача 9.txt").read()

count_1, count_2 = 1, 1
maxim_1, maxim_2 = 0, 0
for i in range(len(s) - 1):
    if s[i] == s[i + 1]:
        count_1 += 1
        count_2 = 1
        maxim_1 = max(maxim_1, count_1)
    else:
        count_2 += 1
        count_1 = 1
        maxim_2 = max(maxim_2, count_2)
print(maxim_1, maxim_2)

Ответ: 3 77

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из пар разных элементов, т.е. в последовательности VVDMVDVMMVDVMDVDMMDD условию будет удовлетворять последовательность MMDD.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задача 10.txt’)
s = f.read() + "+"
# плюс один символ, чтобы проверить все пары
maxim = 0
for j in range(2):
    count = 0
    for i in range(j + 1, len(s) - 1, 2):
        if s[i] == s[i - 1] :
            count += 2
            maxim = max(maxim, count)
            if s[i] == s[i + 1]:
                count = 0
        else:
            count = 0
print(maxim)

Ответ: 4

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

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

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

Вложения к задаче
Показать ответ и решение
s = open("24.txt").read()
gl = "AOUEI"
countgl, countsogl = 1, 1
maxgl, maxsogl = 0, 0
for i in range(len(s) - 1):
    if s[i] in gl and s[i + 1] in gl:
        countgl += 1
        maxgl = max(maxgl, countgl)
    else:
        countgl = 1
    if not(s[i] in gl or s[i + 1] in gl):
        countsogl += 1
        maxsogl = max(maxsogl, countsogl)
    else:
        countsogl = 1
print(maxgl, maxsogl)

Ответ: 8 64

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

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

Текстовый файл состоит не более чем из 106  символов P, S, H, K. Определите количество троек, состоящих из подряд идущих символов таких, что в тройке хотя бы две буквы одинаковы. Для выполнения этого задания следует написать программу.

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

Ответ: 214066

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

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

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

Вложения к задаче
Показать ответ и решение
# Будем хранить самую длинную цепочку с разными соседями
answer = 0
# Счетчик для текущей цепочки
current_count = 1
# Читаем весь текст из файла
s = open(’244.txt’).read()

# Проходим по всем символам (кроме последнего)
for i in range(len(s) - 1):
    # Проверяем, что текущий и следующий символ РАЗНЫЕ
    if (s[i] != s[i+1]):
       # Цепочка продолжается - увеличиваем счетчик
       current_count += 1
       # Запоминаем самую длинную цепочку
       answer = max(answer, current_count)
    else:
        # Нашли два одинаковых символа подряд - начинаем новую цепочку
        current_count = 1

# Выводим длину самой длинной цепочки
print(answer)

Ответ: 61

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

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

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

Напишите программу, которая находит подстроки, целиком состоящие из букв K и имеющие длину больше 1. Рядом с этой подстрокой не должно стоять букв K так как в этом случае они тоже входят в эту подстроку. В качестве ответа запишите через пробел количество таких строк, а также максимальную длину подобной строки. (Пример: AKKKC — для данной строки ответом будет 1 3).

Вложения к задаче
Показать ответ и решение
f = open(’Задание 24.txt’)
s = f.readline()
counter = 1
ans = 0
maxim = 1
for i in range(len(s) - 1):
    if s[i] == s[i + 1] and s[i] == ’K’:
        counter += 1
    else:
        if counter != 1:
            maxim = max(maxim, counter)
            ans += 1
            counter = 1
if s[-1] == ’K’ and s[-2] == ’K’:
    ans += 1
maxim = max(maxim, counter)
print(ans, maxim)

Ответ: 128 3

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

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

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

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

Вложения к задаче
Показать ответ и решение
file = open("Задание_24__looa.txt")
text = file.readline()
string = ""
s = ""
for i in range(len(text)):
    if text[i] not in s:
        s += text[i]
        if len(s) > len(string):
            string = s
    else:
        # Новая строчка - начиная со следующего после символа, равного text[i]
        s = s[s.find(text[i]) + 1:] + text[i]
print(string, len(string))

Ответ: 2W7NDR8Z0GPE 12

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

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

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

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

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

Вложения к задаче
Показать ответ и решение
# Открываем файл и читаем первую строку
f = open(’Zadanie_24_ejg3.txt’)
s = f.readline()

# counter - счетчик длины текущей цепочки
counter = 1
# maxim - максимальная длина найденной цепочки
maxim = 0
# bukva - символ, из которого состоит самая длинная цепочка
bukva = ’’

# Проходим по всем символам строки (кроме последнего)
for i in range(len(s)-1):
    # Если текущий символ равен следующему
    if s[i] == s[i+1]:
        # Увеличиваем счетчик текущей цепочки
        counter += 1
        # Если текущая цепочка стала длиннее максимальной
        if maxim < counter:
            # Обновляем максимальную длину
            maxim = counter
            # Запоминаем символ этой цепочки
            bukva = s[i]
    else:
        # Цепочка прервалась - сбрасываем счетчик
        counter = 1

# Выводим символ и длину самой длинной цепочки
print(bukva, maxim)

Ответ: S 6

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

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

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

Текстовый файл состоит не более чем из 106  десятичных цифр (0, 1, ... , 9).

Определите количество символов самой длинной последовательности, где не встречаются цифры 3 и 5.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_24__f6wk.txt’)
s = f.readline()
maxim = 0
counter = 0
for i in range(len(s)):
    if s[i] != ’5’ and s[i] != ’3’:
        counter += 1
        if counter > maxim:
            maxim = counter
    else:
        counter = 0
print(maxim)

Ответ: 53

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

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

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

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

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

Вложения к задаче
Показать ответ и решение
s = open(’244.txt’).readline()
count = 0
ans = 0
gl = [’A’, ’E’]
for i in range(len(s)):
    if s[i] not in gl:
        count += 1
        ans = max(ans, count)
    else:
        count = 0
print(ans)

Ответ: 20

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

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

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

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

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

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

Ответ: 11

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

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

Текстовый файл состоит не более чем из 106  символов @, &,#  . Определите максимальную длину цепочки, состоящей из одного символа вида @ ...@  , или # ...#  , или & ...&  . В ответе запишите полученную длину.
Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
file = open(’Задание_24__hi71__swy7.txt’)
a = file.readline()
symb = ’@#$’
c = [0] * 3
maxim = [0] * 3
for i in range(3):
    for j in range(len(a)):
        if a[j] == symb[i]:
            c[i] += 1
            maxim[i] = max(maxim[i], c[i])
        else:
            c[i] = 0
print(max(maxim))

Ответ: 19

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

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

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

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

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

Длину подцепочки запишите в двоичной системе счисления

Вложения к задаче
Показать ответ и решение
def perevod(n, a):
    s = ’’
    while n != 0:
        s = str(n % a) + s
        n //= a
    return s


alp = ’QWERTYUIOPASDFGHJKLZXCVBNM’
f = open(’Задание_24__iob7.txt’)
s = f.readline()
maxim = 0
counter = 1
for i in range(len(s)-1):
    if s[i] == s[i+1]:
        counter += 1
        if counter > maxim:
            maxim = counter
            for j in range(26):
                if alp[j] == s[i]:
                    letter = s[i]
    else:
        counter = 1
print(letter, perevod(maxim, 2))

Ответ: W 100

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

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из рядом стоящих символов V  , т.е. в последовательности VVMMVDVVVVMDMVDVVVV такой последовательностью будет VVVV  .

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

Вложения к задаче
Показать ответ и решение
s = open(’Задание_24__odge.txt’).read()
ans = ’V’
while ans in s:
    ans += ’V’
print(len(ans) - 1)

Ответ: 2

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

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

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

Текстовый файл содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 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

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

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

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

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

Вложения к задаче
Показать ответ и решение
file = open("Задание_24__pstv.txt")
string = file.readline()
c = 1  # нужна длина последовательности, не количество пар, поэтому начинаем с 1
maxim = 0
for i in range(len(string) - 1):
    if int(string[i]) % 2 == int(string[i + 1]) % 2:
        c += 1
        maxim = max(maxim, c)
    else:
        c = 1
print(maxim)

Ответ: 18

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из рядом стоящих символов M, т.е. в последовательности VDMVDVDMMMVDVDVV такой последовательностью будет MMM.

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

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

Ответ: 11

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

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

Текстовый файл состоит не более чем из 106  символов V, D, M.

Найдите самую длинную последовательность, состоящую из символов V, стоящих через 1  элемент (разница в индексе равна 2  ), т.е. в последовательности VDVMVDMVD такой последовательностью будет (V)D(V)M(V)DMVD.

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

Вложения к задаче
Показать ответ и решение
file = open("Задание 24.txt")  
text = file.read()  
max_len_1 = cur_len_1 = 0  
for i in range(len(text) - 2):  
    if text[i] == text[i + 2] == ’V’:  
        cur_len_1 += 1  
    else:  
        cur_len_1 = 0  
    max_len_1 = max(cur_len_1, max_len_1)  
max_len_2 = cur_len_2 = 0  
for i in range(1, len(text) - 2):  
    if text[i] == text[i + 2] == ’V’:  
        cur_len_2 += 1  
    else:  
        cur_len_2 = 0  
    max_len_2 = max(cur_len_2, max_len_2)  
print(max(max_len_1, max_len_2) + 1)

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