1045. 分割标签
给出一个由小写字母组成的字符串S。需要将这个字符串分割成尽可能多的部分,使得每个字母最多只出现在一个部分中,并且返回每个部分的长度。
样例
样例 1:
输入: S = "ababcbacadefegdehijhklij"
输出: [9,7,8]
解释:
划分后成为 "ababcbaca", "defegde", "hijhklij".
这是一个错误划分:"ababcbacadefegde", "hijhklij" 因为前一个还可以继续划分.
样例 2:
输入: S = "abcab"
输出: [5]
解释:
无法划分。
注意事项
-
S的长度在[1, 500]范围内。
-
S只包含小写字母('a' 至 'z')。
public class Solution {
/**
* @param S: a string
* @return: a list of integers representing the size of these parts
*/
public List<Integer> partitionLabels(String S) {
int[] dp = new int[26];
for (int i = 0; i < S.length(); i++) {
dp[S.charAt(i) - 'a'] = i;
}
List<Integer> result = new ArrayList<>();
int flag = -1;
int last = 0;
for (int i = 0; i < S.length(); i++) {
last = Math.max(last, dp[S.charAt(i) - 'a']);
if (last == i) {
result.add(i - flag);
flag = i;
}
}
return result;
}
}