LeetCode 763劃分字母區間 詳解

2022-09-02 21:03:19 字數 1229 閱讀 9970

字串s由小寫字母組成。我們要把這個字串劃分為盡可能多的片段,同乙個字母只會出現在其中的乙個片段。返回乙個表示每個字串片段的長度的列表。

示例 1:

輸入:s = "ababcbacadefegdehijhklij"輸出:[9,7,8]解釋:劃分結果為 "ababcbaca", "defegde", "hijhklij"。

每個字母最多出現在乙個片段中。

像 "ababcbacadefegde", "hijhklij" 的劃分是錯誤的,因為劃分的片段數較少。

注意:

s的長度在[1, 500]之間。

s只包含小寫字母'a''z'

此題關鍵的想法就是找到能分割的條件, 對s的每個字元進行判斷, 看是否此字元是被分割到另乙個字元中。

通過分析題目可以知道, 要求乙個字元只能出現在乙個字串裡, 這裡可以知道第乙個條件:

但是這個條件顯然是不夠的,當出現前面分割的字串沒出現的字元時, 是不是能直接加進去呢? 這是不行的

考慮分割此字串

aaaaabcdaefgh

當判斷b的時候, 首先在前面已經分好的字串aaaaa裡面沒有,符合條件。所以我們把b當做新的分割點。 單著顯然是錯誤的,因為在b後面的字串裡,出現了a, 當我們以b作為分割點的話必定有兩個分割的字串,不符合條件。 所以第二個限制條件:

綜上條件我們可以得到結果

class solution 

//如果當前字母在原來的字串裡 就加入進去

if(contain_char.

find

(s[i]

)!= string:

:npos)

else

}//如果後面有字元 就把當前字元加入到前面的字串裡

if(flag)

else}}

re.push_back

(strlen)

;return re;}}

;

此題利用貪心演算法是我對每乙個s的字元, 在能把這個字元分離的情況下。 對每乙個字元進行判斷, 這樣得到的字串的數目應該是最多的

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 每...