1. 题目

你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步。

请你实现 BrowserHistory 类:

  • BrowserHistory(string homepage) ,用 homepage 初始化浏览器类。
  • void visit(string url) 从当前页跳转访问 url 对应的页面 。执行此操作会把浏览历史前进的记录全部删除。
  • string back(int steps) 在浏览历史中后退 steps 步。如果你只能在浏览历史中后退至多 x 步且 steps > x ,那么你只后退 x 步。请返回后退 至多 steps 步以后的 url 。
  • string forward(int steps) 在浏览历史中前进 steps 步。如果你只能在浏览历史中前进至多 x 步且 steps > x ,那么你只前进 x 步。请返回前进 至多 steps步以后的 url 。
示例:
输入:
["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
[["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]]
输出:
[null,null,null,null,"facebook.com","google.com","facebook.com",null,"linkedin.com","google.com","leetcode.com"]解释:
BrowserHistory browserHistory = new BrowserHistory("leetcode.com");
browserHistory.visit("google.com");       // 你原本在浏览 "leetcode.com" 。访问 "google.com"
browserHistory.visit("facebook.com");     // 你原本在浏览 "google.com" 。访问 "facebook.com"
browserHistory.visit("youtube.com");      // 你原本在浏览 "facebook.com" 。访问 "youtube.com"
browserHistory.back(1);                   // 你原本在浏览 "youtube.com" ,后退到 "facebook.com" 并返回 "facebook.com"
browserHistory.back(1);                   // 你原本在浏览 "facebook.com" ,后退到 "google.com" 并返回 "google.com"
browserHistory.forward(1);                // 你原本在浏览 "google.com" ,前进到 "facebook.com" 并返回 "facebook.com"
browserHistory.visit("linkedin.com");     // 你原本在浏览 "facebook.com" 。 访问 "linkedin.com"
browserHistory.forward(2);                // 你原本在浏览 "linkedin.com" ,你无法前进任何步数。
browserHistory.back(2);                   // 你原本在浏览 "linkedin.com" ,后退两步依次先到 "facebook.com" ,然后到 "google.com" ,并返回 "google.com"
browserHistory.back(7);                   // 你原本在浏览 "google.com", 你只能后退一步到 "leetcode.com" ,并返回 "leetcode.com"提示:
1 <= homepage.length <= 20
1 <= url.length <= 20
1 <= steps <= 100
homepage 和 url 都只包含 '.' 或者小写英文字母。
最多调用 5000 次 visit, back 和 forward 函数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-browser-history
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似文章:

数据结构–栈--浏览器前进后退应用
POJ 1028 浏览器前进后退(双栈)

class BrowserHistory {   // C++stack<string> bk, ft;string cur;
public:BrowserHistory(string homepage) {cur = homepage;}void visit(string url) {while(!ft.empty())ft.pop();bk.push(cur);cur = url;}string back(int steps) {ft.push(cur);while(--steps && !bk.empty()){ft.push(bk.top());bk.pop();}if(!bk.empty()){cur = bk.top();bk.pop();}else{cur = ft.top();ft.pop();}return cur;}string forward(int steps) {bk.push(cur);while(--steps && !ft.empty()){bk.push(ft.top());ft.pop();}if(!ft.empty()){cur = ft.top();ft.pop();}else{cur = bk.top();bk.pop();}return cur;}
};

484 ms 87.2 MB

  • python3 用 list 模拟,左边为 back,右边为 front
class BrowserHistory: # py3def __init__(self, homepage: str):self.pos = 0self.stk = [homepage]def visit(self, url: str) -> None:self.pos += 1self.stk = self.stk[0:self.pos] # 删除frontself.stk.append(url) def back(self, steps: int) -> str:self.pos = max(0, self.pos-steps)return self.stk[self.pos]def forward(self, steps: int) -> str:self.pos = min(len(self.stk)-1, self.pos+steps)return self.stk[self.pos]

236 ms 15.6 MB

LeetCode 1472. 设计浏览器历史记录(双栈)相关推荐

  1. POJ 1028 浏览器前进后退(双栈)

    题目链接:http://poj.org/problem?id=1028 我的相同博文参考:https://blog.csdn.net/qq_21201267/article/details/88938 ...

  2. LeetCode 716. 最大栈(双栈 / list+map)

    文章目录 1. 题目 2. 解题 2.1 双栈解法 2.2 list+map 1. 题目 设计一个最大栈,支持 push.pop.top.peekMax 和 popMax 操作. push(x) -- ...

  3. LeetCode 341. 扁平化嵌套列表迭代器(双栈)

    文章目录 1. 题目 2. 双栈解题 1. 题目 给定一个嵌套的整型列表.设计一个迭代器,使其能够遍历这个整型列表中的所有整数. 列表中的项或者为一个整数,或者是另一个列表. 示例 1: 输入: [[ ...

  4. LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)

    1. 题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7] ...

  5. LeetCode 641. 设计循环双端队列

    文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...

  6. [算法设计题] 双栈结构

    双栈结构 要求 要求编写双栈初始化,判断栈空.栈满.进栈和出栈 已知的双栈结构: typedef struct {int top[2], bot[2]; //栈顶和栈底指针SElemType *V; ...

  7. Leetcode224 基本加减计算器-双栈和状态转换

    题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1&quo ...

  8. 好家伙!QQ正在读取你所有的浏览器历史记录?腾讯致歉后,网友评论绝了

    近日,在知乎上"如何看待QQ扫描读取所有浏览器的历史记录?"的话题讨论热度居高不下. 此事源于一篇在著名开发者论坛V2EX上的热帖,根据楼主"mengyx"的说 ...

  9. 浏览器历史记录的模式

    浏览器的历史记录,当我们浏览一个页面就会出现一个前进和后退的箭头 这种就是能够将当前页面后退至上一步页面,前进就是后退至你当时浏览的页面 浏览器的历史记录有两种写入方式:分别为push和replace ...

最新文章

  1. 怎样用python画雪花_python使用turtle库与random库绘制雪花
  2. Vue+Element-ui+二级联动封装组件
  3. CSS设置透明边框解决浏览器兼容性问题
  4. 漫谈“外来的和尚会念经”
  5. mysql 全面知识点_Mysql知识点整理
  6. 第10课:优化神经网络——如何防止过拟合
  7. cad怎么表示出一个孔_怎么训练出一个NB的Prophet模型
  8. 电子签章(Electronic Signature)在C#中的实现方法
  9. 计算机网络基础B试题及答案,计算机网络基础试题及答案2
  10. CAD,SolidWorks相比ProE,UG等软件有什么区别?怎么下载?
  11. 程序员做技术管理需要懂哪些方面?
  12. 新特效火爆抖音!各路神仙齐唱《蚂蚁呀嘿》,网友:短短几秒需一生来治愈
  13. 【解决电脑】开机屏幕左键无反应,右键变加载;选择文件夹未响应,卡顿40秒后恢复;新建文件夹正常,删除移动卡顿
  14. python 推导式练习题
  15. 无线路由器怎么做一个家庭服务器,家庭路由器怎么做DHCP服务器
  16. R WinBugs network meta analysis
  17. 自动驾驶仿真软件列表
  18. 关于青岛某电视厂商新研发中心周边环境的思考
  19. 为将来而记下的过去——扭曲的爱,病态的教育
  20. 区块链之联盟链---认识Fabric

热门文章

  1. Linux中chown和chmod的区别和用法
  2. git 忽略 部分文件夹_git提交忽略某些文件或文件夹
  3. 嵌入式面试中常见的问答题(线程进程、TCP等)
  4. linux bjobs
  5. 认识星座、八大行星的观察
  6. 【代码笔记】iOS-UILable电子表显示
  7. iOS开源照片浏览器框架SGPhotoBrowser的设计与实现
  8. linux-0.11内核 调试教程+GCC源代码
  9. windows phone 7 中文天气预报应用--来源http://www.cnblogs.com/liulunet/archive/2011/08/17/2141696.html...
  10. flare3d_clone