Условие: № 7891 (Уровень: Средний)
• Статья подготовлена командой itpy
• Полный разбор задачи в Telegram
(Е. Фокин) Текстовый файл состоит не более чем из 10^6 символов и содержит только буквы латинского алфавита и десятичные цифры. Найдите максимальную длину подстроки, ограниченной с двух сторон одним и тем же символом и не содержащей этого символа между ними. В ответе укажите длину найденной строки, включая граничные символы. Например, для строки ABCDABECD ответом будет 6.
Файлы к заданию: 24.txt
Решение через Python и комментарии к нему:
Комментарии к коду решения:
- from string import * - импортирует все символы и константы из модуля string, что включает в себя ascii_uppercase (заглавные буквы), digits (цифры) и другие.
- alphabet = digits + ascii_uppercase - объединяет цифры и заглавные буквы в одну строку и сохраняет результат в переменной alphabet.
- print(alphabet) - выводит на экран строку, содержащую все цифры и заглавные буквы: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".
- s = open('24.txt').readline() - считывает строку из файла '24.txt' и сохраняет ее в переменной s.
- maxi = 0 - инициализирует переменную maxi значением 0, которая будет использоваться для хранения максимальной длины строки.
- Цикл for a in alphabet: проходит по символам в строке alphabet.
- s = s.replace(f'{a}', f'{a} {a}') - заменяет каждое вхождение символа a в строке s на a a, чтобы удвоить символ.
- if maxi < max([len(x) for x in s.split()]): - проверяет, если текущая максимальная длина строки меньше максимальной длины из списка длин слов, то обновляет maxi и выводит текущий символ и максимальную длину.
- s = s.replace(f'{a} {a}', f'{a}') - заменяет удвоенные символы обратно, чтобы восстановить исходную строку.
- print(maxi) - выводит на экран максимальную длину строки после прохождения всех символов алфавита.
Итак, данный код удваивает символы из алфавита в строке, находит максимальную длину строки после этой операции и выводит ее на экран.