生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1472. 设计浏览器历史记录(双栈)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 題目
你有一個(gè)只支持單個(gè)標(biāo)簽頁(yè)的 瀏覽器 ,最開始你瀏覽的網(wǎng)頁(yè)是 homepage ,你可以訪問(wèn)其他的網(wǎng)站 url ,也可以在瀏覽歷史中后退 steps 步或前進(jìn) steps 步。
請(qǐng)你實(shí)現(xiàn) BrowserHistory 類:
- BrowserHistory(string homepage) ,用 homepage 初始化瀏覽器類。
- void visit(string url) 從當(dāng)前頁(yè)跳轉(zhuǎn)訪問(wèn) url 對(duì)應(yīng)的頁(yè)面 。執(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" 。訪問(wèn)
"google.com"
browserHistory
.visit
("facebook.com"); // 你原本在瀏覽
"google.com" 。訪問(wèn)
"facebook.com"
browserHistory
.visit
("youtube.com"); // 你原本在瀏覽
"facebook.com" 。訪問(wèn)
"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" 。 訪問(wèn)
"linkedin.com"
browserHistory
.forward
(2); // 你原本在瀏覽
"linkedin.com" ,你無(wú)法前進(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ù)。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/design-browser-history
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
類似文章:
數(shù)據(jù)結(jié)構(gòu)–棧--瀏覽器前進(jìn)后退應(yīng)用
POJ 1028 瀏覽器前進(jìn)后退(雙棧)
class BrowserHistory { stack
<string
> bk
, ft
;string cur
;
public:BrowserHistory(string homepage
) {cur
= homepage
;}void visit(string url
) {while(!ft
.empty())ft
.pop();bk
.push(cur
);cur
= url
;}string
back(int steps
) {ft
.push(cur
);while(--steps
&& !bk
.empty()){ft
.push(bk
.top());bk
.pop();}if(!bk
.empty()){cur
= bk
.top();bk
.pop();}else{cur
= ft
.top();ft
.pop();}return cur
;}string
forward(int steps
) {bk
.push(cur
);while(--steps
&& !ft
.empty()){bk
.push(ft
.top());ft
.pop();}if(!ft
.empty()){cur
= ft
.top();ft
.pop();}else{cur
= bk
.top();bk
.pop();}return cur
;}
};
484 ms 87.2 MB
- python3 用 list 模擬,左邊為 back,右邊為 front
class BrowserHistory: def __init__(self
, homepage
: str):self
.pos
= 0self
.stk
= [homepage
]def visit(self
, url
: str) -> None:self
.pos
+= 1self
.stk
= self
.stk
[0:self
.pos
] self
.stk
.append
(url
) def back(self
, steps
: int) -> str:self
.pos
= max(0, self
.pos
-steps
)return self
.stk
[self
.pos
]def forward(self
, steps
: int) -> str:self
.pos
= min(len(self
.stk
)-1, self
.pos
+steps
)return self
.stk
[self
.pos
]
236 ms 15.6 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1472. 设计浏览器历史记录(双栈)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。