Für die Aufgabe wurde diese einzeilige Lösung mit verschiedenen Variationen vorgeschlagen:
def solve(string):
s = ''.join([ch for ch in string if ch in '()'])
return len(max(s.split(')'), key=len))


Funktionierende Lösung? Nein.
Wenn wir dieser Funktion die Zeichenkette (()(())) füttern, ist die richtige Antwort (Tiefe): 3, aber die Funktion gibt 2 zurück. Die Logik „Anzahl aufeinanderfolgender öffnender Klammern“ scheitert an allen verschachtelten Strukturen, die nicht im ersten Zweig liegen.

☝🏻 Wie man es richtig macht
Eine langweilige, aber funktionierende Lösung mit O(n)-Komplexität verwendet einen einfachen Zähler. Wir gehen die Zeichenkette durch, erhöhen den Zähler bei (, verringern ihn bei ) und aktualisieren bei jedem Schritt das globale Maximum.

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
# Validierung der Korrektheit (optional)
if current_depth < 0:
return -1

return max_depth if current_depth == 0 else -1


Variante für Ästheten (funktional):

Wenn man es unbedingt in einer Zeile haben möchte, kann man accumulate verwenden. Wir mappen Klammern auf 1 und -1, berechnen die Präfixsummen (accumulate) und nehmen das Maximum.

from itertools import accumulate

def solve_poly(s: str) -> int:
# Wandle '(' in 1, ')' in -1, den Rest in 0
depths = accumulate(1 if c == '(' else -1 if c == ')' else 0 for c in s)
return max(depths, default=0)


#algosobes