網(wǎng)站數(shù)據(jù)庫連接失敗百度識(shí)圖在線識(shí)別
題目:
你有一個(gè)只支持單個(gè)標(biāo)簽頁的?瀏覽器?,最開始你瀏覽的網(wǎng)頁是?homepage
?,你可以訪問其他的網(wǎng)站?url
?,也可以在瀏覽歷史中后退?steps
?步或前進(jìn)?steps
?步。
請(qǐng)你實(shí)現(xiàn)?BrowserHistory
?類:
BrowserHistory(string homepage)
?,用?homepage
?初始化瀏覽器類。void visit(string url)
?從當(dāng)前頁跳轉(zhuǎn)訪問?url
?對(duì)應(yīng)的頁面??。執(zhí)行此操作會(huì)把瀏覽歷史前進(jìn)的記錄全部刪除。string back(int steps)
?在瀏覽歷史中后退?steps
?步。如果你只能在瀏覽歷史中后退至多?x
?步且?steps > x
?,那么你只后退?x
?步。請(qǐng)返回后退?至多?steps
?步以后的?url
?。string forward(int steps)
?在瀏覽歷史中前進(jìn)?steps
?步。如果你只能在瀏覽歷史中前進(jìn)至多?x
?步且?steps > x
?,那么你只前進(jìn)?x
?步。請(qǐng)返回前進(jìn)?至多?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" ,前進(jìn)到 "facebook.com" 并返回 "facebook.com" browserHistory.visit("linkedin.com"); // 你原本在瀏覽 "facebook.com" 。 訪問 "linkedin.com" browserHistory.forward(2); // 你原本在瀏覽 "linkedin.com" ,你無法前進(jìn)任何步數(shù)。 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
?都只包含?'.' 或者小寫英文字母。- 最多調(diào)用?
5000
?次?visit
,?back
?和?forward
?函數(shù)。
解法:棧
class BrowserHistory {
private:std::stack<std::string> backStack; // 用于存儲(chǔ)后退歷史的棧std::stack<std::string> forwardStack; // 用于存儲(chǔ)前進(jìn)歷史的棧std::string currentPage; // 當(dāng)前頁面public:BrowserHistory(std::string homepage) {currentPage = homepage;}void visit(std::string url) {// 訪問新頁面時(shí),清空前進(jìn)歷史while (!forwardStack.empty()) {forwardStack.pop();}// 將當(dāng)前頁面壓入后退歷史棧backStack.push(currentPage);// 更新當(dāng)前頁面currentPage = url;}std::string back(int steps) {// 后退 steps 步,但不能超過后退歷史棧的大小while (steps > 0 && !backStack.empty()) {forwardStack.push(currentPage);currentPage = backStack.top();backStack.pop();steps--;}return currentPage;}std::string forward(int steps) {// 前進(jìn) steps 步,但不能超過前進(jìn)歷史棧的大小while (steps > 0 && !forwardStack.empty()) {backStack.push(currentPage);currentPage = forwardStack.top();forwardStack.pop();steps--;}return currentPage;}
};
代碼解釋:
-
BrowserHistory(string homepage)
:-
初始化瀏覽器歷史記錄,設(shè)置當(dāng)前頁面為?
homepage
。
-
-
void visit(string url)
:-
當(dāng)訪問一個(gè)新頁面時(shí),清空前進(jìn)歷史棧(因?yàn)樵L問新頁面后,無法再前進(jìn)到之前的頁面)。
-
將當(dāng)前頁面壓入后退歷史棧。
-
更新當(dāng)前頁面為新的?
url
。
-
-
string back(int steps)
:-
從后退歷史棧中彈出頁面,最多彈出?
steps
?步。 -
每后退一步,將當(dāng)前頁面壓入前進(jìn)歷史棧。
-
返回后退后的當(dāng)前頁面。
-
-
string forward(int steps)
:-
從前進(jìn)歷史棧中彈出頁面,最多彈出?
steps
?步。 -
每前進(jìn)一步,將當(dāng)前頁面壓入后退歷史棧。
-
返回前進(jìn)后的當(dāng)前頁面。
-