1. 程式人生 > >力扣——劃分字母區間

力扣——劃分字母區間

bsp return add label 輸入 區間 劃分 list 輸出

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

示例 1:

輸入: S = "ababcbacadefegdehijhklij"
輸出: [9,7,8]
解釋:
劃分結果為 "ababcbaca", "defegde", "hijhklij"。
每個字母最多出現在一個片段中。
像 "ababcbacadefegde", "hijhklij" 的劃分是錯誤的,因為劃分的片段數較少。

註意:

  1. S的長度在[1, 500]之間。
  2. S只包含小寫字母‘a‘‘z‘
class
Solution { public List<Integer> partitionLabels(String S) { if (S == null || S.length() == 0) { return null; } List<Integer> res = new ArrayList<>(); int index, i, len = S.length(); int[] cache = new int[26];
for (i = 0; i < len; i++) { cache[S.charAt(i) - ‘a‘] = i; } i = 0; while (i < len) { index = cache[S.charAt(i) - ‘a‘]; for (int j = i + 1; j < index && j < len; j++) { if (cache[S.charAt(j) - ‘a‘] > index) { index
= cache[S.charAt(j) - ‘a‘]; } } res.add(index - i + 1); i = index + 1; } return res; } }

力扣——劃分字母區間