Класс, разберёмся по шагам и дадим подсказку, чтобы ты сам дошёл до верного решения.
Суть задачи Нужно найти максимальную длину подстроки файла, где буквы A и B встречаются ровно по одному разу (то есть count(A) = 1 и count(B) = 1 внутри этой подстроки). Остальные буквы могут встречаться сколько угодно раз.
Правильная идея решения Оценить максимальную подпоследовательность можно с помощью двух указателей (скользящего окна):
- Расширяем правый указатель, считая количество A и B в тексте окна.
- Если количество A или B стало больше 1, сдвигаем левый указатель вправо, пока оба счётчика не станут ≤ 1.
- В каждый момент, когда count(A) = 1 и count(B) = 1, обновляем максимум длины окна.
- Продолжаем до конца строки.
Такой подход даёт корректное решение за линейное время O(n).
Сравнение с твоим ответом Ты ничего не дал как ответ (написал, что ученик не дал ответ). Это не решение задачи. Правильный результат для теста — 182. Чтобы получить его, нужен именно подход со скользящим окном, описанный выше.
Как решить правильно (пояснение и простой план)
- Прочитай строку из файла: s = line.strip()
- Инициализируй левый указатель l = 0 и счетчики countA = 0, countB = 0, max_len = 0
- Итерируй правым указателем r по каждому индексу строки
- если s[r] == 'A', увеличь countA; если 'B' — увеличь countB
- пока countA > 1 или countB > 1, сдвигай левый указатель: если s[l] == 'A' уменьши countA, аналогично для 'B'; l += 1
- если countA == 1 и countB == 1, обновляй max_len как max(max_len, r - l + 1)
- Выводи max_len
- Простой рабочий пример кода (путь к файлу может быть другим, но логика такая) with open("24.txt", "r") as f: s = f.readline().strip()
max_len = 0 l = 0 countA = 0 countB = 0
for r in range(len(s)): if s[r] == 'A': countA += 1 if s[r] == 'B': countB += 1
while countA > 1 or countB > 1:
if s[l] == 'A':
countA -= 1
if s[l] == 'B':
countB -= 1
l += 1
if countA == 1 and countB == 1:
max_len = max(max_len, r - l + 1)
print(max_len)
Если запустить на твоём файле, должен получится 182.
Хочешь, могу вместе проверить на конкретном примере или разобрать, почему именно так работает счётчик идвижения окна?
Пожалуйста, оцени мой ответ лайком или дизлайком.