你有一個只支持單個標籤頁的 瀏覽器 ,最開始你瀏覽的網頁是 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 。
示例:
輸入:
["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
[["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]]
輸出:
[null,null,null,null,"facebook.com","google.com","facebook.com",null,"linkedin.com","google.com","leetcode.com"]
解釋:
BrowserHistory browserHistory = new BrowserHistory("leetcode.com");
browserHistory.visit("google.com"); // 你原本在瀏覽 "leetcode.com" 。訪問 "google.com"
browserHistory.visit("facebook.com"); // 你原本在瀏覽 "google.com" 。訪問 "facebook.com"
browserHistory.visit("youtube.com"); // 你原本在瀏覽 "facebook.com" 。訪問 "youtube.com"
browserHistory.back(1); // 你原本在瀏覽 "youtube.com" ,後退到 "facebook.com" 並返回 "facebook.com"
browserHistory.back(1); // 你原本在瀏覽 "facebook.com" ,後退到 "google.com" 並返回 "google.com"
browserHistory.forward(1); // 你原本在瀏覽 "google.com" ,前進到 "facebook.com" 並返回 "facebook.com"
browserHistory.visit("linkedin.com"); // 你原本在瀏覽 "facebook.com" 。 訪問 "linkedin.com"
browserHistory.forward(2); // 你原本在瀏覽 "linkedin.com" ,你無法前進任何步數。
browserHistory.back(2); // 你原本在瀏覽 "linkedin.com" ,後退兩步依次先到 "facebook.com" ,然後到 "google.com" ,並返回 "google.com"
browserHistory.back(7); // 你原本在瀏覽 "google.com", 你只能後退一步到 "leetcode.com" ,並返回 "leetcode.com"
提示:
1 <= homepage.length <= 20
1 <= url.length <= 20
1 <= steps <= 100
homepage 和 url 都只包含 '.' 或者小寫英文字母。
最多調用 5000 次 visit, back 和 forward 函數。
//id處,覆蓋或者添加x
template<typename T>
void finsert(vector<T>&v,int id,T x)
{
if(id<0||id>v.size())return;
if(id==v.size())v.push_back(x);
v[id]=x;
}
class BrowserHistory {
public:
vector<string>v;
int k,len;
BrowserHistory(string homepage) {
v.push_back(homepage),k=0,len=1;
}
void visit(string url) {
finsert(v,++k,url);
len=k+1;
}
string back(int steps) {
return v[k-=min(steps,k)];
}
string forward(int steps) {
return v[k+=min(steps,len-k-1)];
}
};