Grupę parens nazywamy otwartym parenem (
, jego pasującym ścisłym parenem )
i wszystkim, co się w nim znajduje.
Grupa lub ciąg znaków Parens nazywa się zrównoważonym w nawiasach, jeśli nie zawiera nic lub zawiera tylko dwie grupy zrównoważonych w nawiasach.
Na przykład:
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.
Również:
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.
Zatem nawiasowo zrównoważony ciąg lub grupa parens powinna:
- Nic nie zawierają.
- Lub zawierają tylko i dokładnie 2 nawiasowo zrównoważone grupy parens. Nie powinien zawierać nic więcej.
Zadanie:
Twoim zadaniem jest napisanie funkcji lub programu, który sprawdza, czy dany łańcuch jest nawiasowo zrównoważony, czy nie.
Wejście:
Dane wejściowe będą ciągiem znaków lub listą znaków lub czymś podobnym. Możesz założyć, że ciąg będzie składał się wyłącznie ze znaków '('
i ')'
. Możesz również założyć, że każdy otwarty paren (
będzie miał pasujący ścisły paren )
, więc nie martw się o ciągi takie jak "((("
lub ")("
lub "(())("
...
Uwaga: Jak wspomniano w jego komentarz mieszka przez @DigitalTrauma, to jest ok, aby subtitute z ()
combo za pomocą innych znaków (takich jak <>
, []
...), czy to powoduje dodatkową pracę jak ucieczka w niektórych językach
Wynik:
Wszystko, co sygnalizuje, czy łańcuch jest nawiasowo zbalansowany, czy nie (prawda czy fałsz, 1 lub 0, ...). Podaj w swojej odpowiedzi, co ma przynieść twoja funkcja / program.
Przykłady:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
Dwa ostatnie przykłady naprawdę zrobiły różnicę!
Powodzenia!
"(()())()"
byłby reprezentowany jako [0, 0, 1, 0, 1, 1, 0, 1]
. To wyeliminowałoby konieczność konwertowania danych wejściowych na kod znakowy, a następnie odejmowanie.