本题要求实现一个操作历史管理器,支持三种命令:
execute 操作描述:执行一个新操作,并清空当前状态之后的所有历史记录undo:回退到上一个操作状态redo:前进到下一个操作状态核心数据结构使用双向链表。
实现一个操作历史管理器,使用双向链表存储执行过的操作。支持执行新操作、撤销和重做功能。
执行完所有命令后,返回当前操作的描述
若执行 undo 时,当前状态是从未执行过任何操作的状态,立即返回 "undo failed",不继续执行后续命令。(注意:undo 可以撤销到从未执行过任何操作的状态)
若执行 redo 时无下一个操作,立即返回 "redo failed",不继续执行后续命令
若当前状态是从未执行过任何操作,当前操作描述为空字符串 ""
输入
[["execute", "insert hello"], ["execute", "newline"], ["execute", "insert woo"], ["undo"], ["execute", "insert world"], ["undo"]]
输出
"newline"
说明
执行 insert hello → 当前:insert hello
执行 newline → 当前:newline
执行 insert woo → 当前:insert woo
撤销 → 当前:newline(当前回滚到上一步的状态)
执行 insert world → 当前:insert world(清除任何后续历史)
撤销 → 当前:newline
输入
[[]]
输出
""
说明
当前状态是从未执行过任何操作,输出: ""
输入
[["execute", "insert hello"], ["undo"]]
输出
""
说明
执行 insert hello → 当前:insert hello
撤销 → 当前:""(当前状态是从未执行过任何操作,输出: "")
输入
[["execute","insert hello"],["undo"],["redo"]]
输出
"insert hello"
说明
执行 insert hello → 当前:insert hello
撤销 → 当前:""
重做 → 当前:insert hello
输入
[["execute","insert V"],["execute","insert W"],["execute","insert A"],["undo"],["undo"],["execute","insert IEW"],["redo"]]
输出
"redo failed"
说明
执行 insert V → 当前 insert V
执行 insert W → 当前:insert W
执行 insert A → 当前:insert A
撤销 → 当前:insert W(当前回滚到上一步的状态)
撤销 → 当前:insert V(当前回滚到上一步的状态)
执行 insert IEW → 当前:insert IEW(清除任何后续历史)
重做 → 重做失败,输出"redo failed",由于上一步已经清空操作历史,所以重做失败