← Все вопросы
Как проверить сбалансированность скобок с помощью стека?
13
Нужно проверить, что в строке скобки расставлены правильно: ([]) — ок, ([)] — нет. Есть несколько видов скобок: (), [], {}. Как это аккуратно сделать через стек?
3 ответа
25
✓ Принятый ответ — помог автору
Идёшь по строке: открывающую скобку кладёшь в стек, на закрывающую — снимаешь верхнюю и проверяешь, что она парная. В конце стек должен быть пустым.
def is_balanced(s):
pairs = {')': '(', ']': '[', '}': '{'}
stack = []
for ch in s:
if ch in '([{':
stack.append(ch)
elif ch in ')]}':
if not stack or stack.pop() != pairs[ch]:
return False
return not stack
print(is_balanced('([])')) # True
print(is_balanced('([)]')) # False
print(is_balanced('((')) # False
Два частых бага: забыть проверку not stack (закрывающая пришла, а стек пуст) и забыть проверить пустоту стека в конце (остались незакрытые).
8
Стек: открывающие — push, закрывающие — pop с проверкой пары. В конце стек пуст → сбалансировано.
4
Стеком.
Ваш ответ
Войдите, чтобы ответить на вопрос.