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