参考资料:代码随想录
题目链接:. - 力扣(LeetCode)
题目的解题思路不难理解。分别统计每个字母最后出现的下标,此处有个小技巧,利用ascii码作差得到每个字母的位置。再遍历一遍字符串,到某个字母的最远下标处开始分割,计算长度。
class Solution {
public List<Integer> partitionLabels(String s) {
int[] hash = new int[26];
char[] chars = s.toCharArray();
int left = 0;
int right = 0;
List<Integer> res = new ArrayList<>();
for(int i = 0;i < chars.length;i++){
hash[chars[i]-'a'] = i;
}
for(int i = 0;i < chars.length;i++){
right = Math.max(right,hash[chars[i]-'a']);
if(i == right){
res.add(right-left+1);
left = right + 1;
}
}
return res;
}
}