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