24.01 Поиск максимальной подстроки
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из цифр от 0 до 9. Найдите самую длинную последовательность, цифр одной
четности.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_38_ДЗ". В ответе запишите длину искомой последовательности.
# Открываем файл и читаем его содержимое f = open("Задание_38_ДЗ.txt") s = f.read() # Инициализируем переменные maxim, counter = 0, 1 # maxim — максимальная длина последовательности, counter — текущая длина # Проходим по всем символам строки, кроме последнего for i in range(len(s) - 1): # Проверяем, четные ли оба символа (текущий и следующий) if int(s[i]) % 2 == int(s[i + 1]) % 2: counter += 1 # Увеличиваем счетчик, если они имеют одинаковую четность maxim = max(maxim, counter) # Обновляем максимальную длину последовательности else: counter = 1 # Сбрасываем счетчик, если четность различается # Выводим максимальную длину последовательности одинаковой четности print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите длину максимальной
неубывающей подпоследовательности символов по таблице ASCII.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_39_ДЗ". В ответе запишите длину искомой подпоследовательности.
# Открываем файл и читаем его содержимое f = open("Задание_39_ДЗ.txt").read() # Инициализируем переменные maxim = 0 # Переменная для хранения максимальной длины неубывающей подпоследовательности count = 1 # Переменная для подсчета текущей длины последовательности # Проходим по всем символам строки, кроме последнего for i in range(len(f) - 1): # Проверяем, не убывает ли последовательность по таблице ASCII if f[i] <= f[i + 1]: count += 1 # Увеличиваем счетчик, если текущий символ меньше или равен следующему maxim = max(count, maxim) # Обновляем максимальную длину, если текущая больше else: count = 1 # Сбрасываем счетчик на 1, если последовательность убывает # Выводим максимальную длину неубывающей подпоследовательности print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность
максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е.
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_40_ДЗ". В ответе запишите длину искомой последовательности.
# Открываем файл и читаем его содержимое f = open("Задание_40_ДЗ.txt") s = f.read() # Считываем все символы из файла в строку s # Инициализируем переменные count = 1 # Счетчик текущей длины последовательности maxim = 0 # Переменная для хранения максимальной длины последовательности # Проходим по всем символам строки, кроме последнего for i in range(len(s) - 1): # Проверяем, является ли текущий символ предшественником следующего в алфавите if ord(s[i]) == ord(s[i + 1]) - 1: count += 1 # Увеличиваем счетчик, если символы идут в алфавитном порядке maxim = max(maxim, count) # Обновляем максимальную длину последовательности else: count = 1 # Сбрасываем счетчик на 1, если последовательность нарушена # Выводим максимальную длину последовательности букв в алфавитном порядке print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность
максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII.
Пример подходящей последовательности:
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_41_ДЗ". В ответе запишите длину искомой последовательности.
Решение 1.
s = open("Задание_41_ДЗ__tcne.txt").read() counter = 1 fl = True # Ждем больше ans = 0 for i in range(len(s) - 1): if s[i] > s[i + 1] and fl: # Ждали больше, нашли больше counter += 1 fl = False # Ждем меньше elif s[i] < s[i + 1] and not fl: # Ждали меньше, нашли меньше counter += 1 fl = True # Ждем больше elif s[i] > s[i + 1] and not(fl): # Ждали меньше, нашли больше (получается больше больше) # Для ситуации CBAB, ждали меньше, получили больше, учитываем # вторую пару больше как начало новой последовательности, # флаг можно не менять, так как он уже ждет меньше counter = 2 elif s[i] < s[i + 1] and fl: # Ждали больше, нашли меньше # Флаг можно не менять, так как он уже ждет меньше counter = 1 else: counter = 1 ans = max(counter, ans) print(ans)
Решение 2. В данном решении надо отдельно рассмотреть последний символ глазами.
with open(’Задание_41_ДЗ.txt’) as f: text = f.read().strip() max_seq_len = 0 for i in range(len(text)): seq_len = 1 for j in range(i+1, len(text)): if (j-i) % 2 == 1 and ord(text[j]) > ord(text[j-1]) or \ (j-i) % 2 == 0 and ord(text[j]) < ord(text[j-1]): seq_len += 1 else: break max_seq_len = max(max_seq_len, seq_len) print(max_seq_len+1)
Решение 3.
with open(’Задание_41_ДЗ.txt’) as f: text = f.read().strip() + "-" seq_len = 1 max_seq_len = 0 for i in range(1, len(text) - 1, 2): if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-": seq_len += 2 max_seq_len = max(max_seq_len, seq_len) else: if text[i - 1] > text[i]: seq_len += 1 max_seq_len = max(max_seq_len, seq_len) seq_len = 1 for i in range(2, len(text) - 1, 2): if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-": seq_len += 2 max_seq_len = max(max_seq_len, seq_len) else: if text[i - 1] > text[i]: seq_len += 1 max_seq_len = max(max_seq_len, seq_len) seq_len = 1 print(max_seq_len)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Возрастающей последовательностью
называется последовательность, элементы которой идут строго в порядке увеличения id по таблице ASCII. Найдите
максимальную возрастающую последовательность символов.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_43_ДЗ". В ответе запишите длину искомой последовательности.
# Открываем файл и читаем его содержимое f = open(’Задание_43_ДЗ.txt’) s = f.read() # Считываем все символы из файла в строку s # Инициализируем переменные count = 1 # Счетчик текущей длины возрастающей последовательности maxim = 0 # Переменная для хранения максимальной длины последовательности # Проходим по всем символам строки, кроме последнего for i in range(len(s) - 1): # Проверяем, идет ли текущий символ перед следующим в порядке увеличения по ASCII if s[i] < s[i + 1]: count += 1 # Увеличиваем счетчик, если символы идут в порядке возрастания maxim = max(maxim, count) # Обновляем максимальную длину последовательности else: count = 1 # Сбрасываем счетчик на 1, если последовательность нарушена # Выводим максимальную длину возрастающей последовательности символов print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов ’(’ и ’)’. Известно, что правильная скобочная последовательность
берет начало в начале файла. Вам необходимо узнать какую максимальну длину имеет правильная скобочная
последовательность. Правильная скобочная последовательность - последовательность скобок, которая подчиняется
нескольким правилам:
1) Последовательность начинается с открывающейся скобки
2) Каждая открывающаяся скобка имеет в пару закрывающаяся скобку
3) Количество открывающихся скобок в любой точке скобочной последовательности больше либо равно количеству закрывающихся
Примеры правильных скобочных последовательностей: ,
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_50_ДЗ". В ответе запишите длину искомой последовательности.
s = f.read()
count_left = 1
count_right = 0
for i in range(1, len(s)):
if s[i] == ’(’:
count_left += 1
else:
if count_left > count_right:
count_right += 1
else:
break
print(count_right + count_left)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Текстовый файл состоит из символов S, R, O. Определите максимальную длину подстроки, состоящей из троек символов OSR или RSO. Искомая подстрока может включать только тройки OSR, только тройки RSO или содержать одновременно как тройки OSR, так и тройки RSO. Тройки не могут пересекаться.
Решение через цикл:
Считаем строку из файла, введём переменную для подсчёта максимального числа троек подряд. Будем срезать по 3 тройки символов и проверять, подходят ли они нам, поскольку мы проверяем тройки - идти по строке будем с шагом 3. Если тройка не подошла - запишем, что уже нашли, далее обнулим счётчик. Пройдёмся по строке начиная с 0, 1 и 2 символа. Это исключит возможность потери каких-либо комбинаций троек. Ответ умножим на 3, чтобы получить количество символов, а не самих троек.
# Читаем строку из файла s = open("Задание_24__tlln.txt").readline() # mx - максимальное количество подряд идущих троек (OSR или RSO) mx = 0 # Перебираем 3 возможных начальных позиции (0, 1, 2) for k in range(0, 3): # c - счетчик текущей последовательности троек c = 0 # Проходим по строке с шагом 3, начиная с позиции k for i in range(k, len(s), 3): # Проверяем текущую тройку символов if s[i:i + 3] in ["RSO", "OSR"]: # Если тройка подходит, увеличиваем счетчик c += 1 # Обновляем максимальное значение mx = max(c, mx) else: # Если тройка не подходит, сбрасываем счетчик c = 0 # Умножаем на 3, чтобы получить длину в символах (а не в тройках) print(mx * 3)
Ошибка.
Попробуйте повторить позже
В текстовом файле 2.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов E.
f = open(’2.txt’) s = f.read() max_size_substring = 0 temp_size = 0 for i in range(len(s)): if s[i] == ’E’: temp_size += 1 max_size_substring = max(max_size_substring, temp_size) else: temp_size = 0 print(max_size_substring)
Ошибка.
Попробуйте повторить позже
В текстовом файле 3.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов B, C или D (в произвольном порядке).
f = open(’3.txt’) s = f.read() max_size_substring = 0 temp_size = 0 for i in range(len(s)): if s[i] in ’BCD’: temp_size += 1 max_size_substring = max(max_size_substring, temp_size) else: temp_size = 0 print(max_size_substring)
Ошибка.
Попробуйте повторить позже
В текстовом файле 4.txt. находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, не содержащей символа A.
f = open(’4.txt’) s = f.read() max_size_substring = 0 temp_size = 0 for i in range(len(s)): if s[i] != ’A’: temp_size += 1 max_size_substring = max(max_size_substring, temp_size) else: temp_size = 0 print(max_size_substring)
Ошибка.
Попробуйте повторить позже
В текстовом файле 5.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из символов одной группы (буквы или цифры).
f = open(’5.txt’) s = f.read() max_size_substring = 0 temp_size_alf = 0 temp_size_numbers = 0 for i in range(len(s)): if s[i] in ’0123456789’: temp_size_numbers += 1 temp_size_alf = 0 max_size_substring = max(max_size_substring, temp_size_numbers) else: temp_size_alf += 1 temp_size_numbers = 0 max_size_substring = max(max_size_substring, temp_size_alf) print(max_size_substring)
Ошибка.
Попробуйте повторить позже
В текстовом файле 6.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину последней самой длинной подцепочки, состоящей из одинаковых символов. Выведите сначала символ, из которого строится цепочка, а затем без пробела – длину этой цепочки.
f = open(’6.txt’) s = f.read() max_size_substring = 1 temp_size_substring = 1 max_symbol = ’’ for i in range(len(s) - 1): if s[i] == s[i + 1]: temp_size_substring += 1 else: temp_size_substring = 1 if temp_size_substring >= max_size_substring: max_size_substring = temp_size_substring max_symbol = s[i] print(max_symbol, max_size_substring, sep="")
Ошибка.
Попробуйте повторить позже
Текстовый файл 7.txt состоит не более чем из символов. Определите максимальное количество идущих подряд
символов, среди которых каждые три подряд идущих символа различны между собой.
f = open(’7.txt’) s = f.read() max_size_substring = 2 temp_size_substring = 2 for i in range(len(s) - 2): if s[i] != s[i + 1] and s[i + 1] != s[i + 2] and s[i] != s[i + 2]: temp_size_substring += 1 max_size_substring = max(max_size_substring, temp_size_substring) else: temp_size_substring = 2 print(max_size_substring)
Ошибка.
Попробуйте повторить позже
В текстовом файле 8.txt находится цепочка из символов, в которую могут входить заглавные буквы латинского алфавита A…Z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов. Найдите все цепочки максимальной длины. В ответе запишите: максимальную длину и все символы, из которых состоят цепочки максимальной длины, в алфавитном порядке. Все в ответе записывайте без пробелов. Пример. Максимальная длина 3 и нашлось 3 цепочки такой длины BBB, AAA, CCC. В ответе запишем: 3ABC
import string f = open(’8.txt’) s = f.read() max_size_substring = 1 temp_size_substring = 1 # Создали список английских букв alf = list(string.ascii_uppercase) counter_alf = [0] * 26 old_symbol = ’’ for i in range(len(s)): if s[i] == old_symbol: temp_size_substring += 1 else: temp_size_substring = 1 old_symbol = s[i] if temp_size_substring >= max_size_substring: max_size_substring = temp_size_substring # Заполняем список максимального количества определенной буквы counter_alf[alf.index(old_symbol)] = max_size_substring max_counter = max(counter_alf) print(max_counter, end="") for i in range(len(counter_alf)): if counter_alf[i] == max_counter: print(alf[i], end="")
Ошибка.
Попробуйте повторить позже
В текстовом файле 10.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите максимальную цепочку вида CD...CD и запишите в ответ сначала длину цепочки, а следом без пробела саму цепочку.
f = open(’10.txt’) s = f.read() max_counter = 0 for start_step in range(2): temp_counter = 0 for i in range(start_step, len(s) - 1, 2): if s[i] + s[i + 1] == "CD": temp_counter += 2 max_counter = max(max_counter, temp_counter) else: temp_counter = 0 print(max_counter, "CD" * (max_counter // 2), sep="")
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов
,
и
. Определите максимальное количество идущих
подряд символов
. Для выполнения этого задания следует написать программу. Ниже приведён файл, который
необходимо обработать с помощью данного алгоритма.
a = open(’24.txt’).readline() k = 0 mx = 0 for i in range(len(a)): if a[i] == ’B’: k += 1 else: k = 0 mx = max(mx, k) print(mx)
Ошибка.
Попробуйте повторить позже
В текстовом файле 2.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов B.
file = open(’24.txt’) s = file.read()#Считываем файл max_size = 0 temp_size = 0 for i in range(len(s)):#Проходимся по строке if s[i] == ’B’:#Если текущий элемент равен B,то увеличиваем счётчик текущей комбинации на 1 temp_size += 1 max_size = max(max_size, temp_size) else: temp_size = 0#В ином случае, мы обнуляем счётчик текущей комбинации print(max_size)
Ошибка.
Попробуйте повторить позже
В текстовом файле 3.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, состоящей из символов A, B или E (в произвольном порядке).
file = open(’24.txt’) s = file.read() max_size = 0 temp_size = 0 for i in range(len(s)): if s[i] in "ABE": temp_size += 1 max_size = max(max_size, temp_size) else: temp_size = 0 print(max_size)
Ошибка.
Попробуйте повторить позже
В текстовом файле 4.txt. находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, не содержащей символа D.
file = open(’24.txt’) s = file.read() max_size = 0 temp_size = 0 for i in range(len(s)): if s[i] != ’D’: temp_size += 1 max_size = max(max_size, temp_size) else: temp_size = 0 print(max_size)
Ошибка.
Попробуйте повторить позже
В текстовом файле 5.txt находится цепочка из символов, в которую могут входить строчные буквы латинского алфавита a…z и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из символов одной группы (буквы или цифры).
file = open(’24.txt’) s = file.read() max_size = 0 temp_size_numbers = 0 temp_size_alf = 0 numbers = "0123456789" for i in range(len(s)): if s[i] in numbers: temp_size_numbers += 1 max_size = max(max_size, temp_size_numbers) temp_size_alf = 0 else: temp_size_alf += 1 max_size = max(max_size, temp_size_alf) temp_size_numbers = 0 print(max_size)