24.01 Поиск максимальной подстроки
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
. Определите длину самой длинной последовательности
идущих подряд символов
.
Для выполнения этого задания следует написать программу. В ответе запишите длину искомой последовательности.
Решение 1:
s = open(’Задание_3_ДЗ.txt’).read() count = 1 maxim = 0 for i in range(len(s) - 1): if (s[i] == s[i + 1] and s[i] == "B"): count += 1 if (count > maxim): maxim = count else: count = 1 print(maxim)
Решение 2:
a = ’B’ maxim = 1 while a in s: a += ’B’ maxim = len(a) print(maxim - 1)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
. Определите длину максимальной последовательности
подряд идущих символов, где все символы одинаковые.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_4_ДЗ". В ответе запишите длину искомой последовательности.
count = 1
maxim = 0
for i in range(len(s) - 1):
if (s[i] == s[i + 1]):
count += 1
if (count > maxim):
maxim = count
else:
count = 1
print(maxim)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Текстовый файл состоит не более чем из символов
,
,
. Определите длину максимальной
последовательности подряд идущих символов, где каждые два соседних символа различны.
Для выполнения этого задания следует написать программу. В ответ запишите длину искомой последовательности.
count = 1
maxim = 0
for i in range(len(s) - 1):
if (s[i] != s[i + 1]):
count += 1
if (count > maxim):
maxim = count
else:
count = 1
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
. Найдите самую длинную последовательность,
состоящую из символов
, стоящих через 1 элемент (разница в индексах равна 2). Например, для последовательности
ответ будет равен 3.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_6_ДЗ". В ответе запишите длину искомой последовательности.
maxim = 0
for j in range(2):
count = 1
for i in range(j, len(s) - 2, 2):
if (s[i] == s[i + 2] and s[i] == ’B’):
count += 1
if (count > maxim):
maxim = count
else:
count = 1
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
,
,
. Найдите модуль разности между длинами
максимальной подпоследовательности, состоящей только из символов
, и максимальной подпоследовательности,
состоящей только из символов
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_7_ДЗ". В ответе запишите искомую разность.
maxA, maxB = 0, 0
countA, countB = 1, 1
for i in range(len(s) - 1):
if (s[i] == s[i + 1] and s[i] == ’A’):
countA += 1
maxA = max(maxA, countA)
else:
countA = 1
if (s[i] == s[i + 1] and s[i] == ’B’):
countB += 1
maxB = max(maxB, countB)
else:
countB = 1
print(maxA, maxB)
print(abs(maxB - maxA))
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
,
,
. Найдите максимальное количество символов
между двумя символами
, при условии, что между ними нет символов
. Например, для последовательности
ответ будет равен 3.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_9_ДЗ". В ответе запишите искомое количество символов.
maxim = 0
A1, A2 = 0, 0
flag = False
for i in range(len(s)):
if (flag == False and s[i] == ’A’):
# Иначе может быть такое, что А является далеко не первым символов
# и найденная разность будет между нулем и первым символом A
A2 = i
flag = True
if (s[i] == ’A’ and flag == True):
A1 = A2
A2 = i
diff = A2 - A1 - 1
if (diff > maxim):
maxim = diff
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
,
,
. Найдите количество символов между двумя
самыми отдалёнными буквами
, между которыми находятся только согласные буквы. Например, для
последовательности
ответ будет равен 3.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_10_ДЗ". В ответе запишите искомое количество символов.
maxim = 0
A1, A2 = 0, 0
flag = False
for i in range(len(s)):
if (flag == False and s[i] == ’A’):
A2 = i
flag = True
if (flag == True):
if (s[i] == ’E’):
flag = False
else:
if (s[i] == ’A’):
A1 = A2
A2 = i
diff = A2 - A1 - 1
if (diff > maxim):
maxim = diff
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
,
,
. Найдите количество повторений сочетаний
,
и
. Для сочетания
считать, что в последовательности
два повторения, для
сочетания
считать, что в последовательности
два повторения, для сочетания
считать, что в
последовательности
два повторения.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_11_ДЗ". В ответе запишите максимальное из трех значений и сочетание, которое повторяется меньше всего без разделительных знаков.
s = open("Задание_11_ДЗ.txt").read() abba, baba, baab = 0, 0, 0 for i in range(len(s) - 3): if (s[i:i+4] == "ABBA"): abba += 1 if (s[i:i+4] == "BABA"): baba += 1 if (s[i:i+4] == "BAAB"): baab += 1 print(abba, baba, baab)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность
максимальной длины, которая не содержит подряд идущих символов R.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_17_ДЗ". В ответе запишите длину искомой последовательности.
s = f.read() + ’+’ #заменим последний символ, чтобы проверить все пары
count = 0
maxim = 0
for i in range(len(s) - 1):
count += 1
if s[i] == s[i + 1] and s[i] == ’R’:
maxim = max(maxim, count)
count = 0
print(max(maxim, count))
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите максимальное количество
подряд идущих пар символов
или
. Искомая подстрока может включать только пары
, только пары
или содержать одновременно как пары
, так и пары
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_18_ДЗ". В ответе запишите искомое количество.
Решение через цикл
Считаем файл. Заменим нужные комбинации на звёздочки, таким образом мы сможем проверять, если рядом две звезды - попалась нужная комбинация. Пройдёмся по строке и последовательно проверим, что соседние элементы - звёзды, если это так, то увеличим счётчик и обновим максимум (если нашли более длинную последовательность), если же последовательность прервалась - сбросим счётчик. Выводим найденный максимум.
# Открываем файл и читаем первую строку f = open("Задание_18_ДЗ.txt") s = f.readline() # Заменяем все пары "RA" и "RE" на звездочки s = s.replace("RA", "*") s = s.replace("RE", "*") # count - счетчик текущей последовательности звездочек count = 1 # maxim - максимальная длина найденной последовательности maxim = 0 # Проходим по всем символам строки (кроме последнего) for i in range(len(s) - 1): # Если два подряд идущих символа - это звездочки if s[i] == s[i + 1] and s[i] == "*": # Увеличиваем счетчик последовательности count += 1 # Обновляем максимальную длину maxim = max(maxim, count) else: # Последовательность прервалась - сбрасываем счетчик count = 1 # Выводим максимальное количество подряд идущих пар RE или RA print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите самую длинную
последовательность, где символы
и
(в любом порядке) не стоят рядом .
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_19_ДЗ". В ответе запишите длину искомой последовательности.
f = f.replace(’MS’, ’M*S’)
f = f.replace(’SM’, ’S*M’)
ar = f.split(’*’)
print(max(map(len, ar)))
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов V, D, M. Найдите самую длинную последовательность, состоящую
из последовательно идущих пар одинаковых элементов. Соседние пары не могут повторяться. Например, строка
«VVDDMMVV» подходит условию, а строка «VVMMMMVV» не подходит.
Для выполнения этого задания следует написать программу. В ответе запишите длину искомой последовательности.
# Открываем файл для чтения f = open("Задание_21_ДЗ__tcfz.txt") # Читаем содержимое файла и добавляем "+" для проверки пар s = f.read() + "+" # Инициализируем счетчики count = 0 # Текущая длина последовательности maxim = 0 # Максимальная длина последовательности # Проверяем символы на нечетных позициях for i in range(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 # Сбрасываем счетчик # Сбрасываем счетчик для следующего цикла count = 0 # Проверяем символы на четных позициях for i in range(2, 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)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность максимальной
длины из подряд идущих элементов, символы которой принадлежат D, S, M, R, E, A, I, K.
Для выполнения этого задания следует написать программу. В ответе запишите длину искомой последовательности.
# Открываем файл для чтения f = open(’Задание_22_ДЗ.txt’) # Читаем содержимое файла s = f.read() # Задаем строку для проверки символов s1 = "DSMREAIK" # Инициализируем счетчики count = 1 # Текущая длина последовательности maxim = 0 # Максимальная длина последовательности # Проходим по всем символам строки for i in range(len(s) - 1): # Проверяем, входят ли текущий и следующий символ в строку s1 if s[i] in s1 and s[i + 1] in s1: count += 1 # Увеличиваем счетчик последовательности maxim = max(maxim, count) # Обновляем максимальную длину else: count = 1 # Сбрасываем счетчик, если символы не в s1 # Выводим максимальную длину последовательности print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите длину максимальной
последовательности символов, которая не содержит подряд идущих повторяющихся троек символов. Для строки
искомая длина равна
, для строки
искомая длина равна
, для
строки
искомая длина равна
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_23_ДЗ". В ответе запишите искомую длину.
# Читаем содержимое файла f = open("Задание_23_ДЗ__tcgb.txt").read() # Инициализируем счетчики count = 5 # Начальная длина последовательности maxim = 5 # Максимальная длина последовательности # Проходим по строке, начиная с первого символа и до предпоследнего блока из 5 символов for i in range(len(f) - 5): # Сравниваем два блока по 3 символа if f[i:i+3] != f[i+3:i+6]: count += 1 # Увеличиваем счетчик, если блоки не равны maxim = max(count, maxim) # Обновляем максимальную длину else: count = 5 # Сбрасываем счетчик до начального значения, если блоки равны # Выводим максимальную длину последовательности print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
,
. Найдите самую длинную последовательность, которая
не содержит подстроку
, т.е. для последовательности
условию удовлетворяет последовательность
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_24_ДЗ". В ответе запишите длину искоймой последовательности.
# Открываем файл для чтения f = open(’Задание_24_ДЗ.txt’) s = f.read() # Читаем содержимое файла # Инициализируем переменные string = "" # Строка для хранения текущей последовательности maxim = 0 # Максимальная длина допустимой последовательности # Проходим по всем символам строки for i in range(len(s)): string += s[i] # Добавляем текущий символ к строке # Проверяем, содержит ли текущая строка подстроку "XXYZ" if string.count("XXYZ") != 0: maxim = max(maxim, len(string) - 1) # Обновляем максимальную длину, исключая последний символ string = "XYZ" # Сбрасываем строку до "XYZ", так как "XXYZ" может быть только в конце # Выводим максимальную длину последовательности, учитывая остаток строки print(max(maxim, len(string)))
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите самую длинную
последовательность, которая не содержит символов
, но содержит не менее 4-ех символов
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_25_ДЗ". В ответе запишите длину искомой строки.
# Читаем содержимое файла f = open("Задание_25_ДЗ.txt").read() # Разделяем строку по символу ’B’ ar = f.split("B") # Инициализируем переменную для хранения максимальной длины maxim = 0 # Проходим по всем частям, полученным после разделения for i in ar: # Проверяем, есть ли в части не менее 4 символов ’C’ # Умножаем длину части на 1, если ’C’ >= 4, иначе на 0 maxim = max(maxim, len(i) * (i.count(’C’) >= 4)) # Выводим максимальную длину подходящей части print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите количество
последовательностей, каждая из которых содержит не менее 15 символов, начинается и заканчивается буквой
и не
содержит букв
(кроме начальной и конечной) и букв
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_26_ДЗ". В ответе запишите искомое количество.
Решение 1
# Читаем содержимое файла f = open("Задание_26_ДЗ__tcm8.txt").read() # Разделяем строку по символу ’A’ ar = f.split("A") # Инициализируем счетчик подходящих подстрок count = 0 # Проверяем первую подстроку (до первого ’A’) if f[0] == ’A’: # Увеличиваем счетчик, если длина подстроки >= 13 и не содержит ’R’ count += ((len(ar[0]) >= 13) and (ar[0].count(’R’) == 0)) # Проверяем последнюю подстроку (после последнего ’A’) if f[len(f) - 1] == ’A’: # Увеличиваем счетчик, если длина подстроки >= 13 и не содержит ’R’ count += ((len(ar[len(ar) - 1]) >= 13) and (ar[len(ar) - 1].count(’R’) == 0)) # Проверяем все подстроки между первыми и последними ’A’ for i in range(1, len(ar) - 1): # Увеличиваем счетчик, если длина подстроки >= 13 и не содержит ’R’ count += ((len(ar[i]) >= 13) and (ar[i].count(’R’) == 0)) # Выводим общее количество подходящих подстрок print(count)
Решение 2
# Читаем содержимое файла s = open("Задание_26_ДЗ__tcm8.txt").read() # Инициализируем переменные flag = False # Флаг для отслеживания наличия ’A’ counter = 0 # Счетчик длины последовательности ans = 0 # Ответ — количество подходящих последовательностей # Проходим по каждому символу в строке for i in range(len(s)): if s[i] == ’A’ and flag: # Если встречаем ’A’ и флаг установлен, увеличиваем счетчик counter += 1 # Увеличиваем ответ, если длина последовательности больше 14 ans += counter > 14 flag = True # Устанавливаем флаг, что мы находимся в последовательности counter = 1 # Сбрасываем счетчик на 1 (для текущего ’A’) elif s[i] == ’A’: # Если встречаем первое ’A’, устанавливаем флаг и сбрасываем счетчик counter = 1 flag = True elif s[i] == ’R’: # Если встречаем ’R’, сбрасываем флаг (заканчиваем последовательность) flag = False else: # Увеличиваем счетчик для текущей последовательности counter += 1 # Выводим количество подходящих последовательностей print(ans)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите длины самых длинных
подпоследовательностей символов, состоящих только из гласных и только из согласных букв (считать, что
-
согласная).
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_29_ДЗ". В ответе запишите длины соответствующих подпоследовательностей через пробел в порядке возрастания.
Английский алфавит: .
# Читаем содержимое файла f = open("Задание_29_ДЗ__tcmj.txt").read() # Определяем гласные буквы gl = ’EIOAU’ # Инициализируем счетчики для гласных и согласных count_gl, count_sogl = 0, 0 maxim_gl, maxim_sogl = 0, 0 # Проходим по каждому символу в строке for i in range(len(f)): if f[i] in gl: # Проверяем, является ли символ гласной count_gl += 1 # Увеличиваем счетчик гласных maxim_gl = max(maxim_gl, count_gl) # Обновляем максимальное количество гласных count_sogl = 0 # Сбрасываем счетчик согласных else: count_sogl += 1 # Увеличиваем счетчик согласных maxim_sogl = max(maxim_sogl, count_sogl) # Обновляем максимальное количество согласных count_gl = 0 # Сбрасываем счетчик гласных # Выводим максимальные длины последовательностей гласных и согласных print(maxim_gl, maxim_sogl)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите длину максимальной
подпоследовательности, где идет чередование гласных и согласных букв. Считать, что
- гласная.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_30_ДЗ". В ответе запишите длину искомой последовательности.
Пример подходящей последовательности:
# Читаем содержимое файла f = open("Задание_30_ДЗ__tcmk.txt").read() # Определяем гласные буквы (включая ’Y’) gl = ’EIOAUY’ # Инициализируем счетчик и максимальную длину последовательности count = 1 maxim = 0 # Проходим по всем символам строки, кроме последнего for i in range(len(f) - 1): # Проверяем, меняется ли тип символа (гласная/согласная) между текущим и следующим if (f[i] in gl) != (f[i + 1] in gl): count += 1 # Увеличиваем счетчик, если тип символа изменился maxim = max(maxim, count) # Обновляем максимальную длину последовательности else: count = 1 # Сбрасываем счетчик, если тип символа не изменился # Выводим максимальную длину последовательности чередующихся гласных и согласных print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов, которые являются цифрами от 1 до 9, знаками плюс, минус.
Найдите подпоследовательность, состоящую из максимального количества положительных чисел. (Положительное число -
число, перед которым либо нет знака, либо знак "+")
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_35_ДЗ". В ответе запишите сумму данной подпоследовательности, если подпоследовательностей с максимальным количеством положительных элементов несколько, то в ответе запишите максимальную сумму.
# Читаем содержимое файла f = open("Задание_35_ДЗ__tcn1.txt").read() # Инициализируем переменные max_plus = 1 # Максимальное количество последовательных знаков ’+’ count_plus = 1 # Текущее количество последовательных знаков ’+’ max_sum = int(f[0]) # Максимальная сумма чисел sum = int(f[0]) # Текущая сумма чисел # Проходим по всем символам строки, начиная со второго и с шагом 2 for i in range(1, len(f) - 1, 2): if f[i] == ’+’: # Если текущий символ — ’+’, добавляем следующее число к сумме sum += int(f[i + 1]) count_plus += 1 # Увеличиваем счетчик последовательных ’+’ # Проверяем, превышает ли текущий счетчик максимальный if count_plus > max_plus: max_plus = count_plus # Обновляем максимальное количество ’+’ max_sum = sum # Обновляем максимальную сумму elif count_plus == max_plus: # Если счетчики равны, проверяем, является ли текущая сумма больше максимальной if sum > max_sum: max_sum = sum # Обновляем максимальную сумму else: # Если текущий символ не ’+’, сбрасываем сумму и счетчик sum = 0 count_plus = 0 # Выводим максимальную сумму чисел, соответствующих самой длинной последовательности ’+’ print(max_sum)