解题思路
这题本质上是一个模拟题,可以用两个栈配合一个当前页面来实现浏览器地址栏功能。
相关算法:栈模拟。
核心思路如下:
- 用一个栈
back_stack 表示当前页面之前的历史页面;
P4781.第1题-浏览器地址栏
题目内容
小明正在开发浏览器地址栏功能,支持四种操作:visit(访问网页)、back(返回上一页)、forward(前进到下一页)、print(输出当前地址)。
初始状态
- 当前页面为
Blank,历史记录中只有 1 个 Blank 页面;
- 最多保存
max_history 个历史记录;
- 每次访问新页面时清空前进记录。
操作说明
- visit url:
- 当前页面更新为该网页,加入历史记录;
- 若超过
max_history,则删除最早记录;
- 清空前进记录;
- 网址
url 为小写字母、数字和点的组合,长度 ≤100,用例数据均为合法输入。
- back:
- 若历史记录至少有两个页面,切换到上一页,原当前页面加入前进记录;否则不做操作。
- forward:
- 若前进记录不为空,切换到下一页,该页面加入历史记录;否则不做操作。
- print:
- 输出当前页面地址,若为
Blank 则输出 Blank。
输入描述
第一行:整数 n(操作数1≤n≤200);第二行:整数maxhistory(0<maxhistory<100);
接下来n行:操作命令。
输出描述
输出:每次print操作输出当前地址,若无访问过任何页面则输出Blank。
样例1
输入
7
10
visit a.com
visit b.com
back
visit c.com
print
forward
print
输出
c.com
c.com
说明
back 命令后,前进记录为 b.com;后续 visit 命令清空前进记录,因此 forward命令无操作。
样例2
输入
7
3
visit a.com
visit b.com
visit c.com
visit d.com
back
forward
print
输出
d.com
说明
back后,当前页面为c.com,再forward,当前页面为d.com
样例3
输入
9
3
visit a.com
visit b.com
visit c.com
visit d.com
visit e.com
back
back
back
print
输出
c.com
说明
容量为3,历史记录中的页面为c.com、d.com、e.com,两次back后,当前页面为c.com,再次back,前面再无页面,因此当前页面为c.com
样例4
输入
4
10
back
print
forward
print
输出
Blank
Blank
说明
初始页面为Blank,历史记录中再无其他页面,因此,back不做操作,fonward也不做操作,输出均为Blank
样例5
输入
4
10
visit abc.com
visit abc.com
back
print
输出
abc.com
说明
访问两次相同的页面场景,历史记录中为Blank、abc.com、abc.com,因此,back后,当前页面为abc.com。