Текстовый файл состоит из заглавных букв латинского алфавита A, B, C, D, E и F.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых пара символов BC (в указанном порядке) встречается не более 180 раз.
Для выполнения этого задания следует написать программу.
Решение
🔹 Шаг 1. Читаем файл в строку и создаём переменные
s = open("24_28765.txt").read()
l = 0
bc = 0
ans = 0
📌 Читаем файл в строку и создаём переменные: левую границу скользящего окна, счётчик пар «BC» и переменную для ответа.
🔹 Шаг 2. Двигаем правую границу окна вправо
for r in range(1, len(s)):
# добавляем новую пару справа
if s[r-1:r+1] == 'BC':
bc += 1
# уменьшаем окно, если пар стало больше 180
📌 Двигаем правую границу окна вправо. Если новая пара символов, появившаяся справа, равна «BC», увеличиваем счётчик таких пар.
🔹 Шаг 3. Пока в окне больше 180 пар «BC», сдвигаем левую границу вправо
while bc > 180:
if s[l:l+2] == 'BC':
bc -= 1
l += 1
# обновляем ответ
📌 Пока в окне больше 180 пар «BC», сдвигаем левую границу вправо. Если при этом из окна уходит пара «BC», уменьшаем счётчик.
🔹 Шаг 4. После того как условие снова выполняется (пар не больше 180)…
ans = max(ans, r - l + 1)
📌 После того как условие снова выполняется (пар не больше 180), обновляем максимальную длину найденного окна.
🔹 Шаг 5. Жми RUN
print(ans)
📌 Жми RUN — в выводе будет максимальная длина подходящего фрагмента.
✅ Ответ: 38442
🔹 Полный код
s = open("24_28765.txt").read()
l = 0
bc = 0
ans = 0
for r in range(1, len(s)):
# добавляем новую пару справа
if s[r-1:r+1] == 'BC':
bc += 1
# уменьшаем окно, если пар стало больше 180
while bc > 180:
if s[l:l+2] == 'BC':
bc -= 1
l += 1
# обновляем ответ
ans = max(ans, r - l + 1)
print(ans)