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.
