Стоимость операций: свести журнал команд стека к его финальному состоянию
Реализуйте функцию apply_ops(ops), которая проигрывает журнал операций над стеком и возвращает его финальное содержимое.
Вход: ops — список строк. Каждая строка — одна из команд:
"push X"— положить целое числоXна вершину (Xможет быть отрицательным);"pop"— снять верхний элемент;"undo"— отменить последнюю изменившую стек команду (pushилиpop), вернув стек в состояние до неё.
Выход: список целых чисел — содержимое стека от дна к вершине.
Краевые случаи:
- пустой список команд даёт пустой список
[]; "pop"на пустом стеке ничего не меняет и не является ошибкой; такая команда считается не изменившей стек, иundoеё пропускает, отменяя предыдущую результативную команду;"undo"при отсутствии команд для отмены ничего не меняет и не является ошибкой;- сами команды
"undo"не отменяются: два подряд"undo"откатывают две последние результативные команды.
Требование по сложности: каждая команда должна обрабатываться за O(1) — нельзя после каждой команды пересобирать стек с нуля, проигрывая весь журнал заново.
Порядок результата важен: первый элемент списка — дно стека.
заготовка решения
def apply_ops(ops):
# ваш код
pass