763.划分字母区间
该题要保证一个字母只出现在一个区间片段,关键是找到一个字母的起始位置,可以用一个数组统计字母的最远结束位置。
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> ans = new ArrayList<>();
int[] edge = new int[26];
char[] str = s.toCharArray();
int n = s.length();
// 更新每个字母的最远下标
for(int i=0; i<n; i++){
edge[str[i]-'a']=i;
}
int start =0, end = 0;
for(int i=0; i<n; i++){
// 更新最远边界
end=Math.max(end,edge[str[i]-'a']);
// 找到分割点
if(i==end){
ans.add(end-start+1);
start=end+1;
}
}
return ans;
}
}