Comprobar que paréntesis, corchetes y llaves están equilibrados exige recordar el orden de apertura. La pila resuelve el problema al desapilar siempre el último delimitador abierto y verificar que coincide con el cierre actual.
(, [, {), apilarla.), ], }), desapilar y comparar:
def validar_parentesis(texto):
pila = []
pares = {')': '(', ']': '[', '}': '{'}
for c in texto:
if c in '([{':
pila.append(c)
elif c in ')]}':
if not pila or pila.pop() != pares[c]:
return False
return len(pila) == 0
El algoritmo es O(n) en tiempo y O(n) en espacio en el peor caso (cuando todos los caracteres son aperturas).
<> o marcadores de plantillas si el lenguaje lo requiere.Practicar esta validación ayuda a reforzar la intuición LIFO y a enfrentar variaciones comunes en entrevistas técnicas.
def validar_parentesis(texto):
pila = []
pares = {')': '(', ']': '[', '}': '{'}
for c in texto:
if c in '([{':
pila.append(c)
elif c in ')]}':
if not pila or pila.pop() != pares[c]:
return False
return len(pila) == 0
if __name__ == "__main__":
casos = [
"(a + b) * (c + d)",
"([{}])",
"( [ ) ]",
"funcion(x[2] + arr{1})",
]
for texto in casos:
print(texto, "=>", "OK" if validar_parentesis(texto) else "ERROR")