LeetCode 去除重複字母

2021-10-12 12:31:00 字數 954 閱讀 5839

原題鏈結:316. 去除重複字母

給你乙個字串 s ,請你去除字串中重複的字母,使得每個字母只出現一次。需保證 返回結果的字典序最小(要求不能打亂其他字元的相對位置)。

示例 1

輸入:s = "bcabc"

輸出:"abc"

示例 2

輸入:s = "cbacdcbc"

輸出:"acdb"

提示

可以參考:一看就會,就差手把手教你寫了

維護乙個單調棧,滿足以下的條件,就可以將棧頂元素去掉:

棧不為空

棧頂元素 相對於 當前遍歷的元素 要靠後一些

棧頂元素 在之後的遍歷中還會遇到

class

solution

deque

deque =

newlinkedlist

<

>()

;for

(int i =

0; i < s.

length()

; i++

)// 新增ch

deque.

add(ch)

;// ch已經在棧中,更新狀態

exists[ch -

'a']

=true;}

// 更新當前元素的個數

count[ch -

'a']--;

} stringbuilder sb =

newstringbuilder()

;for

(char ch : deque)

return sb.

tostring()

;}}

316 去除重複字母 leetcode

原題鏈結 本題是就是上一道樂扣將去除k位數字的要求換成了去重.要求同樣是字典序最小.這道題的注意點就是 去重 只出現一次的再大也不能去掉 已經在棧裡的小寫字母不需要再push進入,不管它多小 因此很容易分析出此單調棧是單調遞增棧,到時候將棧內元素pop出再反轉即可 1 class solution ...

去除重複字母 LeetCode361

問題描述 給你乙個僅包含小寫字母的字串,請你去除字串中重複的字母,使得每個字母只出現一次。需保證返回結果的字典序最小 要求不能打亂其他字元的相對位置 示例 1 輸入 bcabc 輸出 abc 示例 2 輸入 cbacdcbc 輸出 acdb 輸入說明 輸入乙個僅包含小寫字母的字串 輸出說明 輸出結果...

leetcode316 去除重複字母

給你乙個字串 s 請你去除字串中重複的字母,使得每個字母只出現一次。需保證 返回結果的字典序最小 要求不能打亂其他字元的相對位置 首先記錄每個元素出現的最後位置。然後建立乙個棧和乙個集合。若當前字元已經在集合 現過了,則跳過該字元 反之,如果棧頂元素大於當前字元,且棧頂元素的最後出現位置在當前位置之...