ETH官方钱包

前往
大廳
主題

LeetCode - 2390. Removing Stars From a String 解題心得

Not In My Back Yard | 2023-07-18 12:00:01 | 巴幣 1100 | 人氣 227

題目連結(jié):


題目意譯:
你被給定一字串 s,其包含著星號「*」。

在一次操作中,你可以:
選擇 s 中的一個(gè)星號、
移除位於其左側(cè)的最近非星號字元,並移除該星號本身。

回傳所有星號移除之後的字串。

注:
輸入之生成滿足每一次操作都是合法的。
可以證明結(jié)果字串將永遠(yuǎn)唯一。

限制:
1 ≦ s.length ≦ 10 ^ 5
s 由小寫英文字母以及星號「*」所組成。
上述提及之操作保證可以作用於 s。



範(fàn)例測資:
範(fàn)例 1:
輸入: s = "leet**cod*e"
輸出: "lecoe"
解釋: 由左至右來進(jìn)行移除之程序:
- 在 "leet*cod*e" 中,離第一個(gè)星號最近的字元為 't'。s 變成了 "lee*cod*e"。
- 在 "lee*cod*e" 中,離第二個(gè)星號最近的字元為 'e'。s 變成了 "lecod*e"。
- 在 "lecod*e" 中,離第三個(gè)星號最近的字元為 'd'。s 變成了 "lecoe"。
此時(shí)已經(jīng)沒有星號了,因此我們回傳 "lecoe"。

範(fàn)例 2:
輸入: s = "erase*****"
輸出: ""
解釋: 整個(gè)字串都被移除了,因此我們回傳一個(gè)空字串。


解題思維:
用一個(gè)雙端佇列(Deque)或堆疊(Stack)來維護(hù)即可。不過後者最後的結(jié)果會是反過來的,所以要額外處理。

掃過一次 s,看到非星號字元就丟進(jìn)雙端佇列或堆疊裡;看到星號就把最近的尚未被移除的,即佇列的「尾端」或是堆疊的「頂端」,並移除該字元即可。

最後如果佇列或堆疊不為空就把其內(nèi)容取出來即為所求(除了堆疊,如上所述)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作