题目

763. 划分字母区间_c++

分析

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。
具体实现步骤:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
    统计完每个字符最后出现的位置了,a是8,b是5…

代码

class Solution {
public List<Integer> partitionLabels(String s) {
int[] res = new int[26];
List<Integer> list = new LinkedList<>();
for(int i = 0;i < s.length();i++){
res[s.charAt(i) - 'a'] = i;
}
int idx = 0;
int lst = -1;
for(int i = 0;i < s.length();i++){
idx = Math.max(res[s.charAt(i) - 'a'],idx);
if(idx == i){
list.add(i - lst);
lst = i;
}
}
return list;
}
}

763. 划分字母区间_数据结构_02