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.
