LeetCode Algorithm 1472. 设计浏览器历史记录

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 1472. 设计浏览器历史记录相关的知识,希望对你有一定的参考价值。

题目链接:1472. 设计浏览器历史记录

Ideas

算法:双栈
数据结构:栈
思路:这明明是一道栈的题目,不知道为啥LeetCode给标成了链表的题目。
可以利用两个栈来实现,一个栈backend用来存储访问历史,另外一个也用来存储访问历史,
咳咳,开个玩笑,另外一个栈frontend用来存储前进历史。
什么是前进历史呢,就是当我们执行一次back操作时,将backend栈的栈顶元素弹出,然后塞入frontend栈,这样再执行forward操作时才能找到之前弹出的历史。

  1. visit:将当前页面链接塞入backend栈,然后跳转到新的链接,注意跳转后要将frontend栈内元素清空;
  2. back:弹出stepsbackend栈顶元素,如果栈为空则停止,弹出的元素主义塞入frontend栈;
  3. forward:弹出stepsfrontend栈顶元素,如果栈为空则停止,弹出的元素主义塞入backend栈;

Code

C++

class BrowserHistory 
private:
    stack<string> backend;
    stack<string> frontend;
    string curUrl;
public:
    BrowserHistory(string homepage) 
        this->curUrl = homepage;
    
    
    void visit(string url) 
        this->backend.push(this->curUrl);
        this->curUrl = url;
        while (!this->frontend.empty()) this->frontend.pop();
    
    
    string back(int steps) 
        while (steps-- && !this->backend.empty()) 
            this->frontend.push(this->curUrl);
            this->curUrl = this->backend.top();
            this->backend.pop();
        
        return this->curUrl;
    
    
    string forward(int steps) 
        while (steps-- && !this->frontend.empty()) 
            this->backend.push(this->curUrl);
            this->curUrl = this->frontend.top();
            this->frontend.pop();
        
        return this->curUrl;
    
;

以上是关于LeetCode Algorithm 1472. 设计浏览器历史记录的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Algorithm 1472. 设计浏览器历史记录

Leetcode 1472. Design Browser History

codevs 1472 体检

NKOJ1472 警卫安排

1472. Design Browser History

洛谷P1472 奶牛家谱 Cow Pedigrees