小红维护一个初始为空的字符串,需要依次执行追加、删除、撤销和重做操作。`APPEND s` 在末尾追加字符串;`POP` 删除末尾一个字符;`UNDO` 撤销最近一次尚未撤销的有效编辑;`REDO` 重做最近一次被撤销且尚未重做的编辑。 空串上的 `POP`、没有历史时的 `UNDO` 或 `REDO` 均无效果。执行一次有效的 `APPEND` 或 `POP` 后,重做记录会被清空;无效操作不会清空。
第一行输入操作数 n 。接下来 n 行每行一个操作。 保证 1 ≤ n ≤ 2× 10^5 ,所有 `APPEND` 的字符串总长度不超过 2× 10^5 ,追加串只含可见非空白 ASCII 字符。
输出最终字符串;若为空则输出一个空行。
5 APPEND abc APPEND d UNDO POP REDO
ab
6 APPEND abc POP UNDO UNDO REDO REDO
ab
考点:栈
数据规模 n ≤ 200000 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:栈
本题切入点
编辑器用两个栈实现撤销/重做:一个栈存已执行编辑、另一个存被撤销的编辑;有效编辑后清空重做栈,UNDO/REDO 在栈间搬运,同时维护当前字符串。
后进先出的结构天然适合处理嵌套、匹配与「最近的更大/更小」问题。
思路框架(栈 通法 · 非本题专属)
实现要点:Python 用 list 当栈(append/pop);判断栈空再取栈顶。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1:输入 5 / APPEND abc / APPEND d / UNDO / POP / REDO → 输出 ab
撤销追加 d 后,新的 POP 清空重做记录,因此最后的 REDO 无效果。
样例 2:输入 6 / APPEND abc / POP / UNDO / UNDO / REDO / REDO → 输出 ab
两次撤销后再依次重做追加和删除。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-06月17号开发岗。