問題重述
字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同一字母最多出現在乙個片段中。返回乙個表示每個字串片段的長度的列表。
示例:輸入:s = 「ababcbacadefegdehijhklij」 輸出:[9,7,8]
解釋:劃分結果為 「ababcbaca」, 「defegde」, 「hijhklij」。每個字母最多出現在乙個片段中。像 「ababcbacadefegde」, 「hijhklij」 的劃分是錯誤的,因為劃分的片段數較少。
思路
只需要乙個大小為26的陣列last,通過一次迴圈記下每乙個字元出現的末尾位置。即last[s(i) – 『a] = i;即陣列第乙個表示字元a,第二個表示b等等。
for
(int i=
0; i < n; i++
)
所以第二個迴圈記下,start和end兩個變數。
比如s的第乙個字元是a,a出現的start是 1 , end是10.第二個字元是b,b出現的 start 是 2,end是11.那麼這個時候,end就需要更新為11.一次類推一直到i 等於 end,
for
(int i=
0; i < n; i++
)}
說明滿足結果,這個串包含的字元在其他串中不出現,因為start和end都在這裡面。
例子:abcabcdede,初始start=end=0;第乙個字元a,end更新為4.第二個字元b,end更新為5,第三個字元c,end更新為6.一直到i=6的時候都沒有更新。此時,i == end,所以前六個字元是乙個串。
最終**
class
solution
vector<
int> answer;
int start =
0, end =0;
for(
int i=
0; i < n; i++)}
return answer;}}
;
Leetcode 763 劃分字母區間
字串s由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhklij 每個字...
Leetcode763 劃分字母區間
problem describe 字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca d...
Leetcode 763 劃分字母區間
字串 s 由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。示例 1 輸入 s ababcbacadefegdehijhklij 輸出 9,7,8 解釋 劃分結果為 ababcbaca defegde hijhklij 每...