题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是设计一个类,能模拟浏览器的访问,返回,前进的三个功能。

思路分享

  • 两个思路,一个是用两个栈来处理前进和返回两个功能的地址,访问和前进的时候把地址存返回的栈,返回的时候把地址存前进。

  • 另一个是只用一个栈,这个栈存储访问地址的记录,根据前进和返回的需要,直接访问对应下标(其实已经不算是栈了吧,毕竟指针跳来跳去的)

    https://leetcode.cn/problems/design-browser-history/solutions/3072257/zhan-mo-ni-pythonjavaccgojsrust-by-endle-g8bn/

  • 无论是从实现的难易程度还是程序的效率,都是第二种思路更为优秀。不过一般初见本题都会想第一个思路~

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class BrowserHistory:

def __init__(self, homepage: str):
self.cur = 0
self.history = [homepage]

def visit(self, url: str) -> None:
self.cur += 1
del self.history[self.cur:]
self.history.append(url)

def back(self, steps: int) -> str:
self.cur = max(0, self.cur-steps)
return self.history[self.cur]

def forward(self, steps: int) -> str:
self.cur = min(len(self.history)-1, self.cur+steps)
return self.history[self.cur]


# 两个栈的解法
# class BrowserHistory:

# def __init__(self, homepage: str):
# self.visited = list() # 用于返回
# self.backed = list() # 用于前进
# self.cur = homepage

# def visit(self, url: str) -> None:
# self.backed.clear()
# self.visited.append(self.cur)
# self.cur = url

# def back(self, steps: int) -> str:
# while self.visited and steps > 0:
# self.backed.append(self.cur)
# self.cur = self.visited.pop()
# steps -= 1
# return self.cur

# def forward(self, steps: int) -> str:
# while self.backed and steps > 0:
# self.visited.append(self.cur)
# self.cur = self.backed.pop()
# steps -= 1
# return self.cur

# Your BrowserHistory object will be instantiated and called as such:
# obj = BrowserHistory(homepage)
# obj.visit(url)
# param_2 = obj.back(steps)
# param_3 = obj.forward(steps)