每日一題 LeetCode之去除重複字母

2021-10-05 22:16:45 字數 1041 閱讀 8160

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

示例 1:

輸入: 「bcabc」

輸出: 「abc」

示例 2:

輸入: 「cbacdcbc」

輸出: 「acdb」

思路:使用棧,並且要使字典序最小,若棧頂元素大於當前元素並且棧頂元素不是唯一的,後續還會出現,則將棧頂元素彈出,將當前元素入棧。

public string removeduplicateletters

(string s)

// 記錄是否在已經得到的字串中

boolean

set =

newboolean[26

];// 記錄每個字元出現的最後乙個位置

int[

newint[26

];for(

int i =

0; i < len; i++

) stack

stack =

newstack

<

>()

;for

(int i =

0; i < len; i++

)while

(!stack.

empty()

&& stack.

peek()

peek()

-'a'

]>= i)

stack.

push

(currentchar)

; set[currentchar -

'a']

=true;}

stringbuilder stringbuilder =

newstringbuilder()

;while

(!stack.

empty()

)return stringbuilder.

tostring()

;}

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

每日一題 LeetCode之括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 思路 使用深度優先遍歷實現,每乙個位置要麼是 要麼是 我們用兩個變數left和right儲存 和 的剩餘個數。每次遞迴,left或right減1,字串新增乙個相應的括號,當lef...

每日一題 LeetCode之單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。說明 拆分時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返回...