题目链接:
链接
题目描述:
思路:
- 要找到每一个字母的最大位置end,也是这一段的结尾位置
- 在这个最大位置内的字母,如果存在某个字母的最大位置 更大,就更新end为更大的
- 如果遍历到end,就说明这一段结束了
实现代码:
class Solution {public List<Integer> partitionLabels(String s) {List<Integer> ans = new ArrayList<>();int[] max = new int[26];//找到每个字母的最大位置for(int i = 0; i < s.length(); i++){max[s.charAt(i) - 'a'] = i;}int start = 0, end = 0;for(int i = 0; i < s.length(); i++){end = Math.max(max[s.charAt(i) - 'a'],end);//遍历到最大位置,说明这一段要结束了if(i == end){ans.add(end - start + 1);start = end + 1;//开始下一段}}return ans;}
}