Мы называем группу паренов открытым пареном (
, его близким паренем )
и всем, что внутри.
Группа или строка parens называется сбалансированной в скобках, если она не содержит ничего или содержит только две группы parens, сбалансированных в скобках.
Например:
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.
Точно так же:
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.
Таким образом, строка со скобками в скобках или группа скобок должны:
- Вообще ничего не содержать
- Или содержат только и ровно 2 группы сбалансированных скобок. Он не должен содержать ничего другого.
Задача:
Ваша задача - написать функцию или программу, которая проверяет, является ли данная строка сбалансированной в скобках или нет.
Входные данные:
На входе будет строка или список символов или что-то подобное. Вы можете предположить, что строка будет состоять только из символов '('
и ')'
. Вы также можете предположить, что у каждого открытого парена (
будет свой близкий парен )
, поэтому не беспокойтесь о строках типа "((("
или ")("
или "(())("
...
Примечание: Как упомянуто @DigitalTrauma в своем замечании сильфона, это нормально subtitute с ()
комбо другими символами (например <>
, []
...), если это вызывает дополнительную работу , как избежать в некоторых языках
Выход:
Все, что указывает на то, сбалансирована ли строка в скобках или нет (true или false, 1 или 0, ...). Пожалуйста, укажите в своем ответе, что ваша функция / программа должна приносить.
Примеры:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
Последние два примера действительно имели значение!
Удачи!
"(()())()"
будет представлен как [0, 0, 1, 0, 1, 1, 0, 1]
. Это избавило бы от необходимости преобразовывать ввод в символьный код и затем вычитать.