Текстовый файл состоит не более чем из \(10^6\) символов и содержит только заглавные буквы латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых буквы \(X,\) \(Y\) и \(Z\) встречаются ровно по пять раз.
Решение:
Python
s = open('7193.txt').readline().strip()
p = [-1] + [x for x in range(len(s)) if s[x] in 'XYZ'] + [len(s) - 1]
ml = 0
for x, y in zip(p, p[16:]):
if all(s[x+1:y].count(c) == 5 for c in 'XYZ'):
ml = max(ml, y - x - 1)
print(ml)
Python. Два указателя
s = open('7193.txt').readline().strip()
p_char = {'X': [], 'Y': [], 'Z': []}
count_char = {'X': 0, 'Y': 0, 'Z': 0}
ml = 0
p_begin = 0
for p in range(len(s)):
if s[p] in 'XYZ':
p_char[s[p]].append(p)
count_char[s[p]] += 1
if any(count_char[c] > 5 for c in 'XYZ'):
stmp = [c for c in 'XYZ' if c != s[p]]
if all(count_char[c] == 5 for c in stmp):
ml = max(ml, p - p_begin)
p_begin = p_char[s[p]].pop(0) + 1
count_char[s[p]] -= 1
for c in stmp:
p_char[c] = [t for t in p_char[c] if t >= p_begin]
count_char[c] = len(p_char[c])
ml = max(ml, len(s) - p_begin)
print(ml)
Ответ: \(288\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене