一魚多吃 用stack來解 移除星號 Removing Stars_Leetcode #2390

更新於 發佈於 閱讀時間約 4 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給定一個字串s,把裡面的星號*視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元

請位最後全部操作完以後,剩下的字串內容為何?

例如:
abc**,最後剩下a。


說明:
bc分別被右邊的星號給吃掉。


測試範例

Example 1:

Input: s = "leet**cod*e"
Output: "lecoe"
Explanation: Performing the removals from left to right:
- The closest character to the 1st star is 't' in "leet**cod*e". s becomes "lee*cod*e".
- The closest character to the 2nd star is 'e' in "lee*cod*e". s becomes "lecod*e".
- The closest character to the 3rd star is 'd' in "lecod*e". s becomes "lecoe".
There are no more stars, so we return "lecoe".

Example 2:

Input: s = "erase*****"
Output: ""
Explanation: The entire string is removed, so we return an empty string.

約束條件

Constraints:

  • 1 <= s.length <= 105
  • s consists of lowercase English letters and stars *.
  • The operation above can be performed on s.

演算法

這題基本上和stack配對模型可說是互為表裡,完美搭配。

邏輯上很直覺,也很好懂。

從左到右,依序掃描每個字元。

如果遇到普通字元直接推入stack

如果遇到星號*相當於我們鍵盤上的backspace 往前吃字元的功能,從stack pop出頂端的元素。

最後,留在stack內部的字元,串接在一起轉成字串,就是答案囉!


程式碼

class Solution:
 def removeStars(self, s: str) -> str:

  stk = []

  # scan each character from left to right
  for char in s:

   if char != '*':
    # push current character into stack
    stk.append( char )
   
   else:
    # pop one character from stack, removed with * together.
    stk.pop()

  return "".join(stk)

複雜度分析

時間複雜度: O( n )
從頭到尾,每個字元檢查過一遍。

空間複雜度: O( n )
需要一個stack,stack耗用空間最多和字串長度一樣長。


關鍵知識點

在於理解並且活用stack 先進後出FILO的特質,來實作*星號和普通字元的配對

記得回去複習 合法括號配對最長合法括號配對字串長度 這兩題,主要的原理是相通的。


Reference:

[1] Python/JS/C++ O(n) by stack [w/ Explaination] 有 中文詳解 解題影片 - Removing Stars From a String - LeetCode

avatar-img
91會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s裡面,最長的合法括弧配對字串長度是多少? 例如 s = "()()" ,最長的合法括弧配對字串長度為4
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
題目會給定我們一個串列,和一個n值,要求我們刪除尾巴數來的第n個節點。 例如 1->2->3->4->5 和 給定n值=2,要求我們刪除尾巴數來的第2個節點。 尾巴數來的第2個節點是4,刪除之後,更新連結,輸出答案如下 1->2->3->5
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
題目會給定一組已經規定好的介面interface,要求我們實作HashSet這種資料結構。也就是一般數學和程式語言中所說的"集合"。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s裡面,最長的合法括弧配對字串長度是多少? 例如 s = "()()" ,最長的合法括弧配對字串長度為4
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
題目會給定我們一個串列,和一個n值,要求我們刪除尾巴數來的第n個節點。 例如 1->2->3->4->5 和 給定n值=2,要求我們刪除尾巴數來的第2個節點。 尾巴數來的第2個節點是4,刪除之後,更新連結,輸出答案如下 1->2->3->5
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
題目會給定一組已經規定好的介面interface,要求我們實作HashSet這種資料結構。也就是一般數學和程式語言中所說的"集合"。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
對於星星兒的話題總是無法維持,而成為〝句點殺手〞。 甚至,有的星星兒因此不斷重覆同一話題。 簡單說,星星兒就有被動的情況。 那麼,該如何協助星星兒,拓展話題廣度呢? 藉由星星兒的興趣,進行切入 故名思義,像我,目前的接納其他的流行歌,不單單只容得下阿鷹的歌,甚至,阿鷹做選秀節目的評審員。
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
藉由曾經閱讀過某影評介紹的「消除氣」以及對星際的想像寫下的唯美詩文
我想,如果是我,多少能活用記憶力,記英文單字。 甚至,也可以用谷歌,查找這單單字的文法和活用的部分。 至少,這是我這個案的能力。 當然,每個星星兒的表現不同,所以,照顧者要細心些。 星星兒的嚴重過直,反而是星星兒的困擾 事實上,星星兒無法在第一時間,用同理心來介入。 因為,容易卡死。
這次的主題,是想說,從應用行為分析,去協助星星兒的連續型延宕式反應,做〝解開過度思維〞。 反而,以針對星星兒有得到澄清和道歉為前提。 光是道歉和澄清,就算星星兒有理解,對星星兒來說,還是有〝牽絲〞 我是兩種都有的成人星星,所以,對我而言,今天的主題,就有必要提出來。 今天,提出來的,是連續型
其實,不單單只是記住規定。 大多時候是因為星星兒有一把尺,造成的愛告狀。 基本上,要星星兒回到課堂上的東西,容易有反效果。 這情況下,就要灌輸重要認知。 和星星兒的說明,如何活用現有的能力,做好當下的重要任務 基本上,星星兒的反效果,在於「無法聽進去」。 準確的說,是因為星星兒的見到違規
我想,照顧者沒有發現,有的星星兒在記憶力沒有專長,導致無法連慣之前的項目順序。 所以我覺得,這部分,要先建立星星兒在順序互換認知。 先從星星兒適應項目互換順序開始 當然也有的讀者會問,這和回想,有什麼關係? 其實我覺得,這是腦子的印象問題。 因為,星星兒容易專注單一,導致無法接受更新。
在星星兒的溝通意識有打開,有的星星兒出現多話的情況。 而要求星星兒閉嘴,太強烈。 因為,這是星星兒的〝刻板模式〞,也是星星兒的連結方式。 那麼,如何協助呢? 我想要的目標:只提出我需要的 其實,星星兒的多話,大多是因為無所事事導致。 因此,訓練星星兒提出自身需要,很重要。 可想而知,既
我想應該有照顧者感到不解,明明星星兒有回應,而且也有在訓練後,有必要的功能出現;怎麼星星兒還是有出現「無法回應」的情況發生? 其實,這就是星星兒的「伴隨終身」的「痕跡」。 今天的實例 像我在等「員工餐」,因為我太過專注,導致無法離開當下的事。 其實,這情況下,要是不斷強硬星星兒離開當下,就容
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
對於星星兒的話題總是無法維持,而成為〝句點殺手〞。 甚至,有的星星兒因此不斷重覆同一話題。 簡單說,星星兒就有被動的情況。 那麼,該如何協助星星兒,拓展話題廣度呢? 藉由星星兒的興趣,進行切入 故名思義,像我,目前的接納其他的流行歌,不單單只容得下阿鷹的歌,甚至,阿鷹做選秀節目的評審員。
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
藉由曾經閱讀過某影評介紹的「消除氣」以及對星際的想像寫下的唯美詩文
我想,如果是我,多少能活用記憶力,記英文單字。 甚至,也可以用谷歌,查找這單單字的文法和活用的部分。 至少,這是我這個案的能力。 當然,每個星星兒的表現不同,所以,照顧者要細心些。 星星兒的嚴重過直,反而是星星兒的困擾 事實上,星星兒無法在第一時間,用同理心來介入。 因為,容易卡死。
這次的主題,是想說,從應用行為分析,去協助星星兒的連續型延宕式反應,做〝解開過度思維〞。 反而,以針對星星兒有得到澄清和道歉為前提。 光是道歉和澄清,就算星星兒有理解,對星星兒來說,還是有〝牽絲〞 我是兩種都有的成人星星,所以,對我而言,今天的主題,就有必要提出來。 今天,提出來的,是連續型
其實,不單單只是記住規定。 大多時候是因為星星兒有一把尺,造成的愛告狀。 基本上,要星星兒回到課堂上的東西,容易有反效果。 這情況下,就要灌輸重要認知。 和星星兒的說明,如何活用現有的能力,做好當下的重要任務 基本上,星星兒的反效果,在於「無法聽進去」。 準確的說,是因為星星兒的見到違規
我想,照顧者沒有發現,有的星星兒在記憶力沒有專長,導致無法連慣之前的項目順序。 所以我覺得,這部分,要先建立星星兒在順序互換認知。 先從星星兒適應項目互換順序開始 當然也有的讀者會問,這和回想,有什麼關係? 其實我覺得,這是腦子的印象問題。 因為,星星兒容易專注單一,導致無法接受更新。
在星星兒的溝通意識有打開,有的星星兒出現多話的情況。 而要求星星兒閉嘴,太強烈。 因為,這是星星兒的〝刻板模式〞,也是星星兒的連結方式。 那麼,如何協助呢? 我想要的目標:只提出我需要的 其實,星星兒的多話,大多是因為無所事事導致。 因此,訓練星星兒提出自身需要,很重要。 可想而知,既
我想應該有照顧者感到不解,明明星星兒有回應,而且也有在訓練後,有必要的功能出現;怎麼星星兒還是有出現「無法回應」的情況發生? 其實,這就是星星兒的「伴隨終身」的「痕跡」。 今天的實例 像我在等「員工餐」,因為我太過專注,導致無法離開當下的事。 其實,這情況下,要是不斷強硬星星兒離開當下,就容