力扣周賽 5430. 設計瀏覽器歷史記錄

你有一個只支持單個標籤頁的 瀏覽器 ,最開始你瀏覽的網頁是 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)];
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章