Chamamos um grupo de parênteses de parêntesis abertos (
, parênteses próximos correspondentes )
e tudo dentro deles.
Um grupo ou sequência de parênteses é chamado de parênteses balanceado se não contiver nada ou apenas dois grupos parênteses balanceados entre parênteses.
Por exemplo:
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.
Da mesma forma:
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.
Portanto, uma string ou grupo parensly equilibrado entre parênteses deve:
- Não contém nada.
- Ou conter apenas e exatamente 2 grupos parênteses equilibrados entre parênteses. Não deve conter mais nada.
Tarefa:
Sua tarefa é escrever uma função ou programa que verifique se uma determinada sequência é equilibrada entre parênteses ou não.
Entrada:
A entrada será uma sequência ou lista de caracteres ou algo semelhante. Você pode assumir que a sequência consistirá apenas dos caracteres '('
e ')'
. Você também pode assumir que cada um parêntese aberto (
terá seus paren perto de correspondência )
, então não se preocupe com cordas, como "((("
ou ")("
ou "(())("
...
Nota: Como mencionado por @DigitalTrauma em seu comentário abaixo, ele está ok para subtitute a ()
combinação por outros caracteres (como <>
, []
...), se é fazendo com que o trabalho adicional como escapar em algumas línguas
Resultado:
Qualquer coisa para sinalizar se a sequência está entre parênteses ou não (verdadeira ou falsa, 1 ou 0, ...). Inclua na sua resposta o que sua função / programa deverá gerar.
Exemplos:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
Os dois últimos exemplos realmente fizeram a diferença!
Boa sorte!
"(()())()"
seria representado como [0, 0, 1, 0, 1, 1, 0, 1]
. Isso eliminaria a necessidade de converter a entrada em código de caractere e subtrair.