763 劃分字母區間

2021-10-25 02:32:54 字數 903 閱讀 8030

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