Задание №24 — Обработка строк, нахождение подстроки
#69677Задание №24ФИПИ
Обработка символьных данных
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, символ Z встречается не более одного раза.
Для выполнения этого задания следует написать программу.
Правильный ответ
43
Пояснение
Решение:
Нужен самый длинный участок, в котором символ Z встречается не более одного раза. Разрежем файл символами Z на куски, состоящие только из X и Y: s.split('Z'). Тогда искомый участок — это либо один такой кусок (ноль символов Z), либо два соседних куска вместе с разделяющим их символом Z, то есть len(parts[i]) + 1 + len(parts[i+1]).
Остаётся перебрать все пары соседних кусков и взять максимум.
s = open('44250_24.txt').read().strip()
parts = s.split('Z')
ans = max(len(p) for p in parts)
for i in range(len(parts) - 1):
ans = max(ans, len(parts[i]) + 1 + len(parts[i + 1]))
print(ans)
Можно и одним проходом «методом двух указателей»: двигаем правую границу окна, а при появлении в окне второго Z сдвигаем левую границу за первый Z.
s = open('44250_24.txt').read().strip()
mx = 0
left = 0
zpos = []
for i, c in enumerate(s):
if c == 'Z':
zpos.append(i)
if len(zpos) > 1:
left = zpos.pop(0) + 1
if i - left + 1 > mx:
mx = i - left + 1
print(mx)
Обе программы выводят 43.
Ответ: 43