Вопрос проверяет знание базовых структур данных и умение выбирать подходящую структуру под задачу с вложенностью и проверкой порядка.
Лучше всего подходит стек, потому что он работает по принципу LIFO: последняя открытая скобка должна закрыться первой. В Python стек обычно реализуют списком (list) через append() и pop(). Иногда используют collections.deque, но для этой задачи list обычно достаточно. Главное — чтобы структура поддерживала быстрое добавление и удаление с конца.
Стек (stack) — структура данных, где элементы извлекаются в обратном порядке добавления: последним добавили — первым достали.
Перед выбором структуры важно сформулировать требование задачи:
нужно всегда сравнивать закрывающую скобку с последней не закрытой открывающей.
Это ровно поведение стека.
Стек на list (самый частый вариант в Python)
Плюсы:
Просто читается
Быстро работает для append / pop с конца
Минусы:
Если ошибочно использовать операции с началом списка (pop(0)), будет медленно
Стек на collections.deque
Плюсы:
Хорошая производительность для операций с обоих концов
Минусы:
Для этой задачи обычно избыточен, но допустим
liststack = []
stack.append('(') # положили
last = stack.pop() # достали последнюю
Очередь (queue): FIFO ломает вложенность
Просто счётчики: не учитывают тип и порядок
Set: теряет порядок полностью
Для вложенных скобок нужна структура с поведением LIFO, поэтому стандартный выбор — стек (обычно на list в Python).