当前位置: 首页 > article >正文

Leetcode1472:设计浏览器历史记录

题目描述:

你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 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 。

代码思路:

初始化 (__init__ 方法)

  • homepage: str 是浏览器的初始页面,即用户首次打开浏览器时显示的页面。
  • self.urls 列表用于存储访问过的页面URL,初始时只包含homepage
  • self.len 表示当前访问过的页面总数(包括homepage),初始化为1。
  • self.curIdx 表示当前显示页面的索引,初始化为0,即homepage

访问新页面 (visit 方法)

  • 输入参数 url: str 是用户想要访问的新页面的URL。
  • self.curIdx += 1 将当前索引加1,准备将新页面URL添加到历史记录中。
  • 判断 if self.curIdx == len(self.urls)
    • 如果当前索引等于历史记录的总长度,说明用户是在访问新的页面,直接将新页面的URL添加到历史记录的末尾。
    • 否则,说明用户是在覆盖当前索引位置的页面(例如,通过点击浏览器的后退按钮然后访问一个新页面)。此时,将当前索引位置的页面URL替换为新页面的URL。
  • self.len = self.curIdx + 1 更新历史记录的总长度。

回退 (back 方法)

  • 输入参数 steps: int 表示用户希望回退的步数。
  • self.curIdx = max(self.curIdx - steps, 0) 计算回退后的索引,确保索引不小于0(即不会回退到历史记录之外)。
  • 返回 self.urls[self.curIdx],即回退后的页面URL。

前进 (forward 方法)

  • 输入参数 steps: int 表示用户希望前进的步数。
  • self.curIdx = min(self.curIdx + steps, self.len - 1) 计算前进后的索引,确保索引不超过历史记录的总长度减1(即不会前进到未访问过的页面)。
  • 返回 self.urls[self.curIdx],即前进后的页面URL。

代码实现:

class BrowserHistory:
    def __init__(self, homepage: str):
        self.urls = [homepage]  # 初始化浏览器历史记录
        self.len = 1  # 当前页面总数
        self.curIdx = 0  # 当前页面的索引

    def visit(self, url: str) -> None:
        # 访问新页面
        self.curIdx += 1
        if self.curIdx == len(self.urls):
            # 如果当前索引等于总长度,直接添加新页面
            self.urls.append(url)
        else:
            # 否则,覆盖当前索引位置的页面
            self.urls[self.curIdx] = url
        self.len = self.curIdx + 1  # 更新总长度

    def back(self, steps: int) -> str:
        # 回退指定步数,确保索引不小于0
        self.curIdx = max(self.curIdx - steps, 0)
        return self.urls[self.curIdx]  # 返回当前页面

    def forward(self, steps: int) -> str:
        # 前进指定步数,确保索引不超过总长度
        self.curIdx = min(self.curIdx + steps, self.len - 1)
        return self.urls[self.curIdx]  # 返回当前页面

 

 


http://www.kler.cn/a/563210.html

相关文章:

  • 深入理解Tomcat与Web应用部署:C/S与B/S架构下的实践指南
  • MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11Win10
  • pytorch阶段性总结1
  • HTML篇
  • react 新手入门指南,常用命令
  • 半导体晶圆精控:ethercat转profient网关数据提升制造精度
  • 企业之IT安全管控概览和实践案例
  • Jenkins升级启动报错
  • PyEcharts 数据可视化:从入门到实战
  • 25风景园林研究生复试面试问题汇总 风景园林专业知识问题很全! 风景园林复试全流程攻略 风景园林考研复试调剂真题汇总
  • excel
  • AVPacket 简介
  • 分布式爬虫
  • PydanticToolsParser 工具(tool call)把 LLM 生成的文本转成结构化的数据(Pydantic 模型)过程中遇到的坑
  • 【一文入门】shell语法进阶篇
  • 数据结构:二叉树的数组结构以及堆的实现详解
  • 127.单词接龙 python
  • Qt开发⑧Qt的窗口_下_浮动窗口+对话框
  • 大白话JavaScript闭包在实际项目中有哪些应用场景?
  • Three.js 引领时代的 三维可视化技术