LeetCode 316 去除重複字母(單調棧)

2021-10-12 22:19:53 字數 692 閱讀 8977

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

注意:該題與 1081 相同

示例 1:

輸入:s = 「bcabc」

輸出:「abc」

示例 2:

輸入:s = 「cbacdcbc」

輸出:「acdb」

問題分析:我們可以使用單調棧來進行解題。

我們對每次放入到元素與棧頂元素進行比較,如果棧頂元素大於該元素並且後續還有和棧頂的元素相等的元素,則就可以出棧。

**如下:

class

solution

string stk;

for(

char

& ch:s)

else

} stk.

push_back

(ch)

; vis[ch-

'a']=1

;}num[ch-

'a']--;

}return stk;}}

;

leetcode316 去除重複字母

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

leetCode 316 去除重複字母

給你乙個字串 s 請你去除字串中重複的字母,使得每個字母只出現一次。需保證 返回結果的字典序最小 要求不能打亂其他字元的相對位置 注意 該題與 1081 相同 示例 1 輸入 s bcabc 輸出 abc 示例 2 輸入 s cbacdcbc 輸出 acdb 先要明白如果在乙個字串中刪去乙個字元需要...

Leetcode 316 去除重複字母

很典型的一道單調棧題目class solution char stack newchar 26 棧頂指標 int top 1 for int i 0 i n i 退棧 如果棧非空 並且 棧的頭元素大於目前元素 並且 棧的頭元素剩餘個數不為0 進行退棧操作 while top 0 stack top ...