(К. Багдасарян) Текстовый файл состоит не более чем из \(10^6\) символов и содержит только десятичные цифры, знаки арифметических операций, а также круглые, квадратные и фигурные скобки: «\((\)», «\()\)», «\([\)», «\(]\)», «\(\{\)», «\(\}\)». Назовем выражение корректным, если:
Примеры корректных выражений: \([\{1+2\}(3+++4)],\) \([(1***2)\{3\}45]\)
Примеры некорректных выражений:
Определите максимальное количество символов в непрерывной последовательности текста, которая представляет собой корректное выражение. Гарантируется, что в тексте присутствуют корректные выражения. В ответе укажите количество символов.
Решение:
Python
s = open('7744.txt').readline().strip()
brackets = '([{}])'
op_brackets = '([{'
d = {'(': (0, 1), ')': (0, -1), '[': (1, 1), ']': (1, -1), '{': (2, 1), '}': (2, -1)}
mlen = 0
ls = len(s)
p = 0
st = [0, 0, 0]
while s[p] not in op_brackets:
p += 1
while p < ls:
b = p
pos, step = d[s[p]]
fbr = pos
st[pos] += step
p += 1
f = True
while p < ls and st[fbr]:
if s[p] in brackets:
pos, step = d[s[p]]
st[pos] += step
p += 1
if any(x < 0 for x in st):
f = False
break
if f and all(x == 0 for x in st):
mlen = max(mlen, p - b)
st = [0, 0, 0]
while p < ls and s[p] not in op_brackets:
p += 1
print(mlen)
Ответ: \(59\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене