예제 #1
0
class MaxStack(Stack):
    def __init__(self) -> None:
        super().__init__()
        self.max_stack = Stack()

    def peek(self):
        return super().peek()

    def push(self, item: Any):
        if self.max_stack.empty():
            self.max_stack.push(item)
        else:
            self.max_stack.push(max(item, self.max_stack.peek()))
        super().push(item)

    def pop(self):
        self.max_stack.pop()
        return super().pop()

    def max(self):
        """
        Получить максимальный элемент. Не извлекает его из стека.
        """
        return self.max_stack.peek()

    def empty(self):
        return super().empty()

    def __len__(self):
        return super().__len__()

    def __bool__(self):
        return super().__bool__()
예제 #2
0
def resolve(s: str):
    stack = Stack()
    first_open_pos = 0
    open_brackets, close_brackets = ['(', '[', '{'], [')', ']', '}']
    for i, ch in enumerate(s, 1):
        if ch in open_brackets:
            if stack.empty():
                first_open_pos = i
            stack.push(ch)
        else:
            if stack.empty():
                return i
            else:
                opened = stack.pop()
                if open_brackets.index(opened) != close_brackets.index(ch):
                    return i
    if stack.empty():
        return 'Success'
    else:
        return first_open_pos