def solve(string):
s = ''.join([ch for ch in string if ch in '()'])
return len(max(s.split(')'), key=len))Рабочее решение? Нет.
Если мы скормим скормим этой функции строку
(()(())), то правильный ответ (глубина): 3, а функция вернет 2. Логика "количество открывающих скобок подряд" ломается на любых вложенных структурах, которые идут не первой веткой. ☝🏻 Как решать правильно
Скучное, но рабочее решение со сложностью O(n) подразумевает обычный счетчик. Мы идем по строке, увеличиваем счетчик на
(, уменьшаем на ) и на каждом шаге обновляем глобальный максимум.def max_depth(s: str) -> int:
current_depth = 0
max_depth = 0
for char in s:
if char == '(':
current_depth += 1
max_depth = max(max_depth, current_depth)
elif char == ')':
current_depth -= 1
# Валидация корректности (опционально)
if current_depth < 0:
return -1
return max_depth if current_depth == 0 else -1Вариант для эстетов (функциональный):
Если уж очень хочется в одну строку, можно использовать
accumulate. Мы мапим скобки в 1 и -1, считаем префиксные суммы (accumulate) и берем максимум.from itertools import accumulate
def solve_poly(s: str) -> int:
# Превращаем '(' в 1, ')' в -1, остальное в 0
depths = accumulate(1 if c == '(' else -1 if c == ')' else 0 for c in s)
return max(depths, default=0)#алгособес
Комментарии
0Войдите, чтобы участвовать в обсуждении.
Комментариев пока нет.