力扣——劃分字母區間
阿新 • • 發佈:2019-03-13
bsp return add label 輸入 區間 劃分 list 輸出
字符串 S
由小寫字母組成。我們要把這個字符串劃分為盡可能多的片段,同一個字母只會出現在其中的一個片段。返回一個表示每個字符串片段的長度的列表。
示例 1:
輸入: S = "ababcbacadefegdehijhklij" 輸出: [9,7,8] 解釋: 劃分結果為 "ababcbaca", "defegde", "hijhklij"。 每個字母最多出現在一個片段中。 像 "ababcbacadefegde", "hijhklij" 的劃分是錯誤的,因為劃分的片段數較少。
註意:
S
的長度在[1, 500]
之間。S
只包含小寫字母‘a‘
到‘z‘
。
classSolution { 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; } }
力扣——劃分字母區間