- фрагмент начинается и заканчивается буквой D;
- любые два символа фрагмента, стоящие через один, различны.
(К. Иглин) Текстовый файл содержит только заглавные буквы латинского алфавита от A до J. Определите максимальное количество идущих подряд символов, которые удовлетворяют условиям:
Пример.
Во фрагменте DABAD символы A и A стоят через один, условие нарушено.
А фрагмент DABCD подходит.
Решение
От D до D
🔹 Шаг 1. Читаем файл в строку s
s = open("24.txt").read()
mx = 0
n = len(s)
📌 Читаем файл в строку s — длинная «лента» из заглавных букв от A до J.
🔹 Шаг 2. Ищем самый длинный подряд идущий фрагмент, который начинается и…
for i in range(n):
if s[i] != "D":
continue
📌 Ищем самый длинный подряд идущий фрагмент, который начинается и заканчивается буквой D.
🔹 Шаг 3. Правило из условия: любые два символа фрагмента, стоящие через один…
for j in range(i, n):
if j >= i + 2 and s[j] == s[j - 2]:
break
📌 Правило из условия: любые два символа фрагмента, стоящие через один, должны быть разными — как в примере DABAD, где две A стоят через одну позицию.
🔹 Шаг 4. Для каждой стартовой D расширяем фрагмент вправо, пока не нарушится…
if s[j] == "D":
mx = max(mx, j - i + 1)
📌 Для каждой стартовой D расширяем фрагмент вправо, пока не нарушится правило (s[j] совпала с s[j−2]); если очередная буква D — обновляем максимум длины.
🔹 Шаг 5. Жми RUN
print(mx)
📌 Жми RUN — в выводе будет 433 (максимальное количество символов в подходящем фрагменте).
✅ Ответ: 433
🔹 Полный код
s = open("24.txt").read()
mx = 0
n = len(s)
for i in range(n):
if s[i] != "D":
continue
for j in range(i, n):
if j >= i + 2 and s[j] == s[j - 2]:
break
if s[j] == "D":
mx = max(mx, j - i + 1)
print(mx)