class Solution {
public List<Integer> partitionLabels(String s) {
//记录下每个字符的最后出现位置,
//遇到一个新的字符串时,初始end为当前字符的最后位置,并遍历处于这个区间中的字符
//当遇到最后出现位置更靠后的字符时,就将end改为该字符的最后出现位置;
//直到当前遍历的位置与end所指的位置一致时,就可以将这个子串的长度记录下来并重新开始上述操作了
//统计每个字符的最后出现位置
List<Integer> res = new ArrayList<>();
Map<Character,Integer> locMap = new HashMap<>();
for(int i = 0;i < s.length();i++){
locMap.put(s.charAt(i),i);
}
//开始遍历
int start = 0,end = -1;
for(int i = 0;i < s.length();i++){
end = Math.max(end,locMap.get(s.charAt(i)));
if(i == end){
res.add(end - start + 1);
start = end + 1;
}
}
return res;
}
}