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.
