328. 字符串划分
给出一个字符串,均为大写字母,将这个字符串划分成尽可能多的部分,使每种字母只会出现一个部分中。返回一个数组包含每个部分的长度。
样例
样例 1:
输入:
"MPMPCPMCMDEFEGDEHINHKLIN"
输出:
[9,7,8]
解释:
"MPMPCPMCM"
"DEFEGDE"
"HINHKLIN"
注意事项
S.length \leq 1000
S
.
l
e
n
g
t
h
≤
1
0
0
0
public class Solution {
/**
* @param s: a string
* @return: an array containing the length of each part
*/
public List<Integer> splitString(String s) {
int[] last = new int[26];
for (int i = 0; i < s.length(); ++i){
last[s.charAt(i) - 'A'] = i;
}
int tail = 0, anchor = 0;
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < s.length(); ++i) {
tail = Math.max(tail, last[s.charAt(i) - 'A']);
if (i == tail) {
ans.add(i - anchor + 1);
anchor = i + 1;
}
}
return ans;
}
}