LeetCode No316 去除重複字母

2021-10-21 07:13:57 字數 967 閱讀 5248

思路:首先需要明白的乙個事實就是:如果要求字典序最小,那麼最好就是abcdefg這樣的字串,越小的字母我們希望越要往前排。

入棧:如果當前字元比棧頂字元大或者棧空,並且棧內沒有當前字元,則入棧

出棧:如果棧頂字元比當前字元大,並且當前位置後面還有棧頂字元(避免因為出棧之後後面就沒有該字元入棧了),則出棧

class

solution

linkedlist

stack =

newlinkedlist

<

>()

;//boolean

tag =

newboolean

[128];

//標記字元c是否加入到棧中

//單調棧

for(

char c : cs)

while

(!stack.

isempty()

&&stack.

getlast()

> c && cnt[stack.

getlast()

]>0)

stack.

add(c)

; tag[c]

=true;}

//拼接字串

stringbuilder sb =

newstringbuilder()

;for

(character c : stack)

return sb.

tostring();}}

LeetCode No 316 去除重複字母

大致思路 例如 輸入 s bcabc 輸出 abc b bc bca 由於c比a字典序大,所以這次考慮可以把c彈出去,看到c在後面還會出現,所以可以彈出去 ba a 同理彈b ab abc 可以看到,彈出的時候滿足後進先出,所以可以基本確定這裡需要使用 棧 結構。確定使用棧後,可以這麼來看,一開始b...

316 去除重複字母

給定乙個僅包含小寫字母的字串,去除字串中重複的字母,使得每個字母只出現一次。需保證返回結果的字典序最小 要求不能打亂其他字元的相對位置 示例 1 輸入 bcabc 輸出 abc 示例 2 輸入 cbacdcbc 輸出 acdb 我的 超時 class solution string removedu...

316 去除重複字母

給定乙個僅包含小寫字母的字串,去除字串中重複的字母,使得每個字母只出現一次。需保證返回結果的字典序最小 要求不能打亂其他字元的相對位置 示例 1 輸入 bcabc 輸出 abc 示例 2 輸入 cbacdcbc 輸出 acdb 分析 這道題就是,第一去重複,第二就是選擇最小的字串。去重複倒是不難,主...