Para o desafio, foi proposta uma solução de uma linha com variações:
def solve(string):
s = ''.join([ch for ch in string if ch in '()'])
return len(max(s.split(')'), key=len))


Solução funcional? Não.
Se alimentarmos esta função com a string (()(())), a resposta correta (profundidade) é 3, mas a função retorna 2. A lógica de "quantidade de parênteses abertos consecutivos" falha em estruturas aninhadas que não estão no primeiro ramo.

☝🏻 Como resolver corretamente
Uma solução simples, mas funcional, com complexidade O(n) usa um contador comum. Percorremos a string, incrementamos o contador em (, decrementamos em ) e a cada passo atualizamos o máximo global.

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
# Validação de correção (opcional)
if current_depth < 0:
return -1

return max_depth if current_depth == 0 else -1


Versão para estetas (funcional):

Se você realmente quer uma linha, pode usar accumulate. Mapeamos parênteses para 1 e -1, calculamos somas prefixas (accumulate) e pegamos o máximo.

from itertools import accumulate

def solve_poly(s: str) -> int:
# Transforma '(' em 1, ')' em -1, o resto em 0
depths = accumulate(1 if c == '(' else -1 if c == ')' else 0 for c in s)
return max(depths, default=0)


#algosobes