← Все вопросы

Как проверить сбалансированность скобок с помощью стека?

Задан 1 месяц назад581 просмотров3 ответа
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

Стеком.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект