力扣——划分字母区间
题目链接:
链接
题目描述:
思路:
- 要找到每一个字母的最大位置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;
}
}