Skip to content

Commit 42843d8

Browse files
committed
feat: add solutions to lc problem: No.1472. Design Browser History
1 parent 58b49e3 commit 42843d8

File tree

4 files changed

+374
-2
lines changed

4 files changed

+374
-2
lines changed

Diff for: solution/1400-1499/1472.Design Browser History/README.md

+154-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ browserHistory.back(7); // 你原本在浏览 "google.com
5353
<li>最多调用&nbsp;<code>5000</code>&nbsp;次&nbsp;<code>visit</code>,&nbsp;<code>back</code>&nbsp;和&nbsp;<code>forward</code>&nbsp;函数。</li>
5454
</ul>
5555

56-
5756
## 解法
5857

5958
<!-- 这里可写通用的实现逻辑 -->
@@ -64,16 +63,170 @@ browserHistory.back(7); // 你原本在浏览 &quot;google.com
6463

6564
<!-- 这里可写当前语言的特殊实现逻辑 -->
6665

66+
列表实现。
67+
6768
```python
69+
class BrowserHistory:
70+
71+
def __init__(self, homepage: str):
72+
self.urls = []
73+
self.cur = -1
74+
self.tail = -1
75+
self.visit(homepage)
76+
77+
def visit(self, url: str) -> None:
78+
self.cur += 1
79+
if self.cur < len(self.urls):
80+
self.urls[self.cur] = url
81+
else:
82+
self.urls.append(url)
83+
self.tail = self.cur
84+
85+
def back(self, steps: int) -> str:
86+
self.cur = max(0, self.cur -steps)
87+
return self.urls[self.cur]
88+
89+
def forward(self, steps: int) -> str:
90+
self.cur = min(self.tail, self.cur + steps)
91+
return self.urls[self.cur]
92+
93+
# Your BrowserHistory object will be instantiated and called as such:
94+
# obj = BrowserHistory(homepage)
95+
# obj.visit(url)
96+
# param_2 = obj.back(steps)
97+
# param_3 = obj.forward(steps)
98+
```
6899

100+
栈实现。
101+
102+
```python
103+
class BrowserHistory:
104+
105+
def __init__(self, homepage: str):
106+
self.s1 = []
107+
self.s2 = []
108+
self.cur = homepage
109+
110+
def visit(self, url: str) -> None:
111+
self.s2.clear()
112+
self.s1.append(self.cur)
113+
self.cur = url
114+
115+
def back(self, steps: int) -> str:
116+
while steps > 0 and self.s1:
117+
self.s2.append(self.cur)
118+
self.cur = self.s1.pop()
119+
steps -= 1
120+
return self.cur
121+
122+
def forward(self, steps: int) -> str:
123+
while steps > 0 and self.s2:
124+
self.s1.append(self.cur)
125+
self.cur = self.s2.pop()
126+
steps -= 1
127+
return self.cur
128+
129+
130+
# Your BrowserHistory object will be instantiated and called as such:
131+
# obj = BrowserHistory(homepage)
132+
# obj.visit(url)
133+
# param_2 = obj.back(steps)
134+
# param_3 = obj.forward(steps)
69135
```
70136

71137
### **Java**
72138

73139
<!-- 这里可写当前语言的特殊实现逻辑 -->
74140

141+
列表实现。
142+
75143
```java
144+
class BrowserHistory {
145+
private List<String> urls;
146+
private int cur = -1;
147+
private int tail = -1;
148+
149+
public BrowserHistory(String homepage) {
150+
urls = new ArrayList<>();
151+
visit(homepage);
152+
}
153+
154+
public void visit(String url) {
155+
++cur;
156+
if (cur < urls.size()) {
157+
urls.set(cur, url);
158+
} else {
159+
urls.add(url);
160+
}
161+
tail = cur;
162+
}
163+
164+
public String back(int steps) {
165+
cur = Math.max(0, cur - steps);
166+
return urls.get(cur);
167+
}
168+
169+
public String forward(int steps) {
170+
cur = Math.min(tail, cur + steps);
171+
return urls.get(cur);
172+
}
173+
}
174+
175+
/**
176+
* Your BrowserHistory object will be instantiated and called as such:
177+
* BrowserHistory obj = new BrowserHistory(homepage);
178+
* obj.visit(url);
179+
* String param_2 = obj.back(steps);
180+
* String param_3 = obj.forward(steps);
181+
*/
182+
```
76183

184+
栈实现。
185+
186+
```java
187+
class BrowserHistory {
188+
private Deque<String> s1;
189+
private Deque<String> s2;
190+
private String cur;
191+
192+
public BrowserHistory(String homepage) {
193+
s1 = new ArrayDeque<>();
194+
s2 = new ArrayDeque<>();
195+
cur = homepage;
196+
}
197+
198+
public void visit(String url) {
199+
s2.clear();
200+
s1.push(cur);
201+
cur = url;
202+
}
203+
204+
public String back(int steps) {
205+
while (steps > 0 && !s1.isEmpty()) {
206+
s2.push(cur);
207+
cur = s1.pop();
208+
--steps;
209+
}
210+
return cur;
211+
}
212+
213+
public String forward(int steps) {
214+
while (steps > 0 && !s2.isEmpty()) {
215+
s1.push(cur);
216+
cur = s2.pop();
217+
--steps;
218+
}
219+
return cur;
220+
}
221+
}
222+
223+
/**
224+
* Your BrowserHistory object will be instantiated and called as such:
225+
* BrowserHistory obj = new BrowserHistory(homepage);
226+
* obj.visit(url);
227+
* String param_2 = obj.back(steps);
228+
* String param_3 = obj.forward(steps);
229+
*/
77230
```
78231

79232
### **...**

Diff for: solution/1400-1499/1472.Design Browser History/README_EN.md

+153-1
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,173 @@ browserHistory.back(7); // You are in &quot;google.com&quot;,
5050
<li>At most <code>5000</code>&nbsp;calls will be made to <code>visit</code>, <code>back</code>, and <code>forward</code>.</li>
5151
</ul>
5252

53-
5453
## Solutions
5554

5655
<!-- tabs:start -->
5756

5857
### **Python3**
5958

59+
Using list.
60+
6061
```python
62+
class BrowserHistory:
63+
64+
def __init__(self, homepage: str):
65+
self.urls = []
66+
self.cur = -1
67+
self.tail = -1
68+
self.visit(homepage)
69+
70+
def visit(self, url: str) -> None:
71+
self.cur += 1
72+
if self.cur < len(self.urls):
73+
self.urls[self.cur] = url
74+
else:
75+
self.urls.append(url)
76+
self.tail = self.cur
77+
78+
def back(self, steps: int) -> str:
79+
self.cur = max(0, self.cur -steps)
80+
return self.urls[self.cur]
81+
82+
def forward(self, steps: int) -> str:
83+
self.cur = min(self.tail, self.cur + steps)
84+
return self.urls[self.cur]
85+
86+
# Your BrowserHistory object will be instantiated and called as such:
87+
# obj = BrowserHistory(homepage)
88+
# obj.visit(url)
89+
# param_2 = obj.back(steps)
90+
# param_3 = obj.forward(steps)
91+
```
6192

93+
Using stacks.
94+
95+
```python
96+
class BrowserHistory:
97+
98+
def __init__(self, homepage: str):
99+
self.s1 = []
100+
self.s2 = []
101+
self.cur = homepage
102+
103+
def visit(self, url: str) -> None:
104+
self.s2.clear()
105+
self.s1.append(self.cur)
106+
self.cur = url
107+
108+
def back(self, steps: int) -> str:
109+
while steps > 0 and self.s1:
110+
self.s2.append(self.cur)
111+
self.cur = self.s1.pop()
112+
steps -= 1
113+
return self.cur
114+
115+
def forward(self, steps: int) -> str:
116+
while steps > 0 and self.s2:
117+
self.s1.append(self.cur)
118+
self.cur = self.s2.pop()
119+
steps -= 1
120+
return self.cur
121+
122+
123+
# Your BrowserHistory object will be instantiated and called as such:
124+
# obj = BrowserHistory(homepage)
125+
# obj.visit(url)
126+
# param_2 = obj.back(steps)
62127
```
63128

64129
### **Java**
65130

131+
Using list.
132+
66133
```java
134+
class BrowserHistory {
135+
private List<String> urls;
136+
private int cur = -1;
137+
private int tail = -1;
138+
139+
public BrowserHistory(String homepage) {
140+
urls = new ArrayList<>();
141+
visit(homepage);
142+
}
143+
144+
public void visit(String url) {
145+
++cur;
146+
if (cur < urls.size()) {
147+
urls.set(cur, url);
148+
} else {
149+
urls.add(url);
150+
}
151+
tail = cur;
152+
}
153+
154+
public String back(int steps) {
155+
cur = Math.max(0, cur - steps);
156+
return urls.get(cur);
157+
}
158+
159+
public String forward(int steps) {
160+
cur = Math.min(tail, cur + steps);
161+
return urls.get(cur);
162+
}
163+
}
164+
165+
/**
166+
* Your BrowserHistory object will be instantiated and called as such:
167+
* BrowserHistory obj = new BrowserHistory(homepage);
168+
* obj.visit(url);
169+
* String param_2 = obj.back(steps);
170+
* String param_3 = obj.forward(steps);
171+
*/
172+
```
67173

174+
Using stacks.
175+
176+
```java
177+
class BrowserHistory {
178+
private Deque<String> s1;
179+
private Deque<String> s2;
180+
private String cur;
181+
182+
public BrowserHistory(String homepage) {
183+
s1 = new ArrayDeque<>();
184+
s2 = new ArrayDeque<>();
185+
cur = homepage;
186+
}
187+
188+
public void visit(String url) {
189+
s2.clear();
190+
s1.push(cur);
191+
cur = url;
192+
}
193+
194+
public String back(int steps) {
195+
while (steps > 0 && !s1.isEmpty()) {
196+
s2.push(cur);
197+
cur = s1.pop();
198+
--steps;
199+
}
200+
return cur;
201+
}
202+
203+
public String forward(int steps) {
204+
while (steps > 0 && !s2.isEmpty()) {
205+
s1.push(cur);
206+
cur = s2.pop();
207+
--steps;
208+
}
209+
return cur;
210+
}
211+
}
212+
213+
/**
214+
* Your BrowserHistory object will be instantiated and called as such:
215+
* BrowserHistory obj = new BrowserHistory(homepage);
216+
* obj.visit(url);
217+
* String param_2 = obj.back(steps);
218+
* String param_3 = obj.forward(steps);
219+
*/
68220
```
69221

70222
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class BrowserHistory {
2+
private List<String> urls;
3+
private int cur = -1;
4+
private int tail = -1;
5+
6+
public BrowserHistory(String homepage) {
7+
urls = new ArrayList<>();
8+
visit(homepage);
9+
}
10+
11+
public void visit(String url) {
12+
++cur;
13+
if (cur < urls.size()) {
14+
urls.set(cur, url);
15+
} else {
16+
urls.add(url);
17+
}
18+
tail = cur;
19+
}
20+
21+
public String back(int steps) {
22+
cur = Math.max(0, cur - steps);
23+
return urls.get(cur);
24+
}
25+
26+
public String forward(int steps) {
27+
cur = Math.min(tail, cur + steps);
28+
return urls.get(cur);
29+
}
30+
}
31+
32+
/**
33+
* Your BrowserHistory object will be instantiated and called as such:
34+
* BrowserHistory obj = new BrowserHistory(homepage);
35+
* obj.visit(url);
36+
* String param_2 = obj.back(steps);
37+
* String param_3 = obj.forward(steps);
38+
*/

0 commit comments

Comments
 (0)