Задача #1402
Работа со строками
(С. Чайкин) Текстовый файл состоит не более чем из 106 заглавных букв латинского алфавита. Определите максимальную длину подстроки, содержащую равное количество букв A и B.
Для выполнения этого задания следует написать программу
Войдите, чтобы история ответов и статистика сохранялись.
Решение
Ответ
482065
Идея решения заключается в использовании префиксных сумм. Можно чуть упростить способ подсчёта букв A и B, но это не имеет смысла.
s = open('24.txt').readline()
# словарь для префиксов
p = {}
c = mx = 0
for i in range(len(s)):
# если в строке равное количество букв
# A и B, то c будет равно 0
c += {'A': 1, 'B': -1}.get(s[i], 0)
# проверим особый случай, когда
# не надо убирать префикс
if c == 0: mx = i + 1
# ищем наибольшую длину с равным
# количеством букв A и B
mx = max(mx, i-p.get(c, 10**50))
# так как мы ищем максимальную длину,
# префикс должен быть минимальным,
# поэтому сохраняем первую строку
# с суммой c
p[c] = p.get(c, i)
print(mx)