py_bracket_validator
Código comentado línea a línea y paso a paso:
Entregas: py_bracket_validator.py con bracket_validator(s). Rank 03 · nivel 1.
Qué pide (en palabras normales)
- ¿Están bien emparejados los paréntesis
(),[]y{}? Bien emparejados = cada uno cierra el último que se abrió. - El resto de caracteres se ignoran. Cadena vacía → True.
Subject (enunciado original)
Write a function that checks if the brackets in a string are valid.
A string is valid if every opening bracket has a matching closing bracket
in the correct order.
Allowed brackets: (), [], {}
Expected file: py_bracket_validator.py
Function signature:
def bracket_validator(s: str) -> bool:
Examples:
bracket_validator("()")
=> True
bracket_validator("()[]{}")
=> True
bracket_validator("(]")
=> False
bracket_validator("([)]")
=> False
bracket_validator("{[]}")
=> True
bracket_validator("hello(world)")
=> True
bracket_validator("((())")
=> False
bracket_validator("")
=> True
La idea: una pila
pairs = {")": "(", "]": "[", "}": "{"}
stack = []
for ch in s:
if ch in "([{":
stack.append(ch)
elif ch in pairs:
if not stack or stack.pop() != pairs[ch]:
return False
return not stack
Abro → apilo. Cierro → desapilo y compruebo que sea la pareja. Al final no puede quedar nada abierto. Tres casos de fallo y los cubre todo: cierre sin apertura ()), pareja cruzada (([)]) y apertura sin cierre (((())).
Trampas
not stackantes delpop(): si no,"]"revienta conIndexError.- Devuelve
not stack, noTrue:"((())"recorre todo sin fallar pero deja una abierta. - Es
bool:not stackya lo es. No devuelvas la lista ni su longitud.