题目
注意visit是从当前页面直接加载下一页面,之前的前进信息都被删除
思路1
- 双栈 一个栈用于返回弹出 一个栈用于前进填入
- 浏览记录返回 backstack弹出存入forwardstack
- 浏览记录前进 forwardstack弹出填入backstack
- visit操作存入新记录前 需要清空forwardstack
代码1
class BrowserHistory {
public:
stack<string> backstack;
stack<string> forwardstack;
BrowserHistory(string homepage) {
backstack.push(homepage);
}
void visit(string url) {
while (!forwardstack.empty()) forwardstack.pop();
backstack.push(url);
}
string back(int steps) {
while (steps > 0 && backstack.size() > 1) {
forwardstack.push(backstack.top());
backstack.pop();
steps--;
}
return backstack.top();
}
string forward(int steps) {
while (steps > 0 && !forwardstack.empty()) {
backstack.push(forwardstack.top());
forwardstack.pop();
steps--;
}
return backstack.top();
}
};
思路2
- 使用vector代替stack,设置浏览指针
- 浏览记录返回 curr-steps 注意判断出界
- 浏览记录前进 curr+steps 注意判断出界
- visit清空前面的浏览记录需要resize 再push_back
代码2
class BrowserHistory {
private:
vector<string> history;
int cur = 0;
public:
BrowserHistory(string homepage) {
history.push_back(homepage);
}
void visit(string url) {
history.resize(++cur);
history.push_back(move(url));
}
string back(int steps) {
return history[cur = max(0, cur - steps)];
}
string forward(int steps) {
cur = min((int)history.size() - 1, cur + steps);
return history[cur];
}
};