AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

N0018. 0429-操作历史管理器的撤销/重做能力

中等通过率 38% · 提交 73 · 通过 28
模拟

小慕正在开发一个项目操作历史管理器,使用来存储所有执行过的操作。这个管理器需要支持执行新操作、功能。 功能说明如下: 1. 执行操作(execute {操作描述}):小慕执行一个新操作,并且会清除当前操作之后的所有历史记录 2. 撤销(undo):小慕可以回退到上一个操作状态(上一个操作状态可以是尚未执行任何操作的状态,如果当前状态已经是从未执行过任何操作的状态,则 undo 操作失败) 3. 重做(redo):小慕可以前进到下一个操作状态(下一个操作状态是之前被撤销过的操作,如果没有进行过撤销操作,即链表的下一个操作状态不存在,则 redo 操作失败) 输入保证命令只会出现 execute {操作描述}、undo、redo 这三种类型。

提示:带虚线的词点一下有通俗解释。

输入描述

每一行输出一个命令

输出描述

1. 执行完所有命令后,返回当前操作的描述 2. 若执行 undo 时,当前状态是从未执行过任何操作的状态,立即返回 "undo failed",不继续执行后续命令。(注意:undo可以撤销到从未执行过任何操作的状态) 3. 若执行 redo 时无下一个操作,立即返回 "redo failed",不继续执行后续命令 4. 若当前状态是从未执行过任何操作,当前操作描述为空字符串 ""

示例

示例 1

输入

6
execute,insert hello
execute,newline
execute,insert woo
undo
execute,insert world
undo

输出

newline

说明:1. 执行insert hello ->当前insert hello 2. 执行newline -> 当前newline 3. 执行insert woo -> 当前 insert woo 4. 撤销 -> 当前newline 5. 执行insert world -> 当前insert world 6. 撤销 -> 当前newline

示例 2

输入

2
execute,insert hello
undo

输出

说明:执行insert hello -> 当前insert hello 撤销,当前状态为"",空字符串

示例 3

输入

3
execute,insert hello
undo
redo

输出

insert hello

说明:1. 执行insert hello,当前为insert hello 2. 撤销,当前状态为"" 3. 重做,当前为insert hello

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
操作历史管理器 - 双向链表示例 初始状态 insert hello newline insert woo 当前 撤销 (undo): 回退到上一个节点(如从 insert woo 回到 newline) 重做 (redo): 前进到下一个节点(如从 newline 回到 insert woo)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「0429-操作历史管理器的撤销/重做能力」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。