字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。
示例 1:
輸入:s = 「ababcbacadefegdehijhklij」
輸出:[9,7,8]
解釋:劃分結果為 「ababcbaca」, 「defegde」, 「hijhklij」。
每個字母最多出現在乙個片段中。
像 「ababcbacadefegde」, 「hijhklij」 的劃分是錯誤的,因為劃分的片段數較少。
其實一開始我還打算用動態規劃做,看了一眼題目標籤,看到貪心演算法和雙指標一下有了思路。
其實,就是從頭開始遍歷,當遍歷到第乙個片段,記為s1,如果s1符合題目的條件,即每個字母最多出現在乙個片段中,那麼s1就是最優解中組成部分,這時記錄s1的長度,然後將指標移動到s1的下乙個位置,繼續遍歷。
在判斷每個字母是否只出現在某個片段時,可以借助於雜湊陣列,用int陣列作為char的雜湊陣列,既可以記錄是否出現,又可以記錄出現次數。當某個char在雜湊陣列中的對應值為0時,說明這個char對應的字母已經全部被遍歷過了。
public list
partitionlabels
(string s)
seth =
newhashset
<
>()
; list
l =newarraylist
<
>()
;int l =0;
int r =0;
while
(r}else}if
(h.size()
==0) r++;}
return l;
}
763 劃分字母區間
字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhklij 每...
763 劃分字母區間
示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhklij 每個字母最多出現在乙個片段中。像 ababcbacadefegde hijhklij 的劃分是錯誤的,因為劃分的片段數較少。注意 s的長度在...
763 劃分字母區間
題目描述 字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhk...