leetcode316 去除重複字母

2021-10-10 18:55:09 字數 706 閱讀 7448

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

首先記錄每個元素出現的最後位置。

然後建立乙個棧和乙個集合。

若當前字元已經在集合**現過了,則跳過該字元;

反之,如果棧頂元素大於當前字元,且棧頂元素的最後出現位置在當前位置之後,表明可以將當前的棧頂元素捨棄掉(因為後面還有乙個,並且可以使字典序更小),則彈出棧頂元素,並從集合中刪除該元素;

將當前元素壓入棧中,並在集合中記錄;

class

solution

stack<

char

> mystack;

unordered_set<

char

> myset;

for(

int i =

0; i < s.

size()

;++i)

// 將當前元素加入棧中

mystack.

push

(temp)

; myset.

insert

(temp);}

} string ans;

while

(!mystack.

empty()

)return ans;}}

;

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 ...

leetcode 316 去除重複字母

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