Llamamos a un grupo de padres el par abierto (
, su par cercano )
y todo lo que hay dentro de ellos.
Un grupo o cadena parenteral se llama entre paréntesis equilibrados si no contiene nada o solo 2 grupos parentales entre paréntesis.
Por ejemplo:
The string "(()())()" is parenthesly balanced
( )() Because it contains exactly 2 parenthesly balanced parens groups
()() The left one is parenthesly balanced because it contains 2 parenthesly balanced parens groups (balanced because they are empty). The right one is parenthesly balanced because it contains nothing.
Igualmente:
The string "(()(()))()" is not parenthesly balanced
( )() Because it contains a parens group that is not parenthesly balanced: the left one
()( ) The left one is not balanced because it contains a parens group that is not balanced: the right one
() The right one is not balanced because it only contains one balanced group.
Por lo tanto, una cadena entre paréntesis equilibrada o un grupo parens debería:
- No contienen nada en absoluto.
- O contenga solo y exactamente 2 grupos parensos equilibrados entre paréntesis. No debe contener nada más.
Tarea:
Su tarea es escribir una función o programa que verifique si una cadena dada es paréntesis balanceada o no.
Entrada:
La entrada será una cadena o lista de caracteres o algo similar. Puede suponer que la cadena solo constará de los caracteres '('
y ')'
. También puede suponer que cada par abierto (
tendrá su par cercano )
, así que no se preocupe por cadenas como "((("
o ")("
o "(())("
...
Nota: Como se ha mencionado por @DigitalTrauma en su comentario abajo, que está bien subtitute el ()
combo por otros caracteres (tales como <>
, []
, ...), si es que causa un trabajo adicional como escapar en algunos idiomas
Salida:
Cualquier cosa para indicar si la cadena está entre paréntesis equilibrada o no (verdadero o falso, 1 o 0, ...). Incluya en su respuesta lo que se espera que produzca su función / programa.
Ejemplos:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
¡Los dos últimos ejemplos realmente marcaron la diferencia!
¡La mejor de las suertes!
"(()())()"
se representaría como [0, 0, 1, 0, 1, 1, 0, 1]
. Esto eliminaría la necesidad de convertir la entrada al código de caracteres y luego restar.