Стек

Стек — одна из самых распространённых структур данных, используемых в алгоритмах. В стеке элемент, добавленный последним, будет удалён первым. Это похоже на стопку тарелок: можно убрать только ту тарелку, которая лежит сверху, пока не будут убраны все тарелки, находящиеся над ней.
Стек можно применять во множестве реальных ситуаций. Например, когда вы просматриваете сайты в веб-браузере, у вас есть кнопка «Назад», позволяющая перейти к предыдущей странице. История страниц может храниться в виде стека: при нажатии «Назад» вы возвращаетесь к верхнему элементу стека. Если нажать «Назад» снова, верхняя страница удаляется из стека, и вы переходите к странице, которая теперь стала верхней.
notion image
Существует несколько способов реализовать стек в языке программирования Python:
  1. С использованием list — верхним элементом стека будет последний элемент списка. Добавление производится с помощью append, удаление — через pop, а получить элемент можно по индексу [-1].
  1. С использованием deque из модуля collections — он поддерживает добавление и удаление элементов как с начала, так и с конца.
  1. LifoQueue из модуля queue — очередь с принципом «последний пришёл — первый ушёл» (Last-in-first-out), что по сути и есть определение стека.
from queue import LifoQueue
stack = LifoQueue()

# push
stack.put(1)
stack.put(2)
stack.put(3)

# pop
print(stack.get())      # prints 3
print(stack.get())      # prints 2

# peek
print(stack.queue[-1])  # prints 1
print(stack.empty())    # check if empty -> prints False
# Using a simple list
stack = []

# push
stack.append(1)
stack.append(2)
stack.append(3)

# pop
print(stack.pop())      # prints 3
print(stack.pop())      # prints 2

# peek
print(stack[-1])        # prints 1
print(len(stack) == 0)  # check if empty -> prints False

Задание: проверить корректность скобочной последовательности

Дана последовательность скобок из математического выражения (например, (()())). Нужно определить, является ли эта последовательность корректной. Последовательность считается корректной, если каждая открывающая скобка имеет соответствующую ей закрывающую, и при этом нет лишних скобок любого типа.

Входные данные

В единственной строке входных данных содержится строка b (1 ≤ |b| ≤ ), в которой записана скобочная последовательность.

Выходные данные

Программа должна вывести Yes, если скобочная последовательность корректна, и No в противном случае.

Примеры

Input
Output
()()
Yes
())()(
No
((()())())
Yes
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue