Chiamiamo un gruppo di parentesi il open paren (
, il suo paren vicino vicino )
e tutto al loro interno.
Un gruppo o una stringa di parentesi è chiamato parentesi bilanciata se contiene nulla o solo 2 gruppi di parentesi bilanciate parentesi.
Per esempio:
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.
Allo stesso modo:
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.
Pertanto, una stringa o un gruppo di parentesi bilanciati tra parentesi dovrebbe:
- Non contenere nulla.
- Oppure contiene solo ed esattamente 2 gruppi di parentesi bilanciate tra parentesi. Non dovrebbe contenere nient'altro.
Compito:
Il tuo compito è scrivere una funzione o un programma che controlli se una determinata stringa è una parentesi bilanciata o meno.
Ingresso:
L'input sarà una stringa o un elenco di caratteri o qualcosa di simile. Puoi presumere che la stringa sarà composta solo da caratteri '('
e ')'
. Puoi anche presumere che ogni parentesi aperta (
abbia la corrispondente parentesi chiusa )
, quindi non preoccuparti di stringhe come "((("
o ")("
o "(())("
...
Nota: Come menzionato da @DigitalTrauma nel suo commento a soffietto, è ok per subtitute il ()
combo da altri personaggi (come ad esempio <>
, []
, ...), se si tratta di causando lavoro in più, come la fuga in alcune lingue
Produzione:
Qualsiasi cosa per segnalare se la stringa è bilanciata tra parentesi o meno (vero o falso, 1 o 0, ...). Includi nella tua risposta ciò che la tua funzione / programma dovrebbe produrre.
Esempi:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
Gli ultimi due esempi hanno davvero fatto la differenza!
Buona fortuna!
"(()())()"
sarebbe rappresentato come [0, 0, 1, 0, 1, 1, 0, 1]
. Ciò eliminerebbe la necessità di convertire l'input in codice carattere e quindi sottrarre.