class Solution {
public:
vector<int> partitionLabels(string S) {
vector<int> re;
int endc[26], len=S.size();
for(int i=0;i<len;++i){
endc[S[i]-'a']=i; //记录每种字符最后出现的位置
}
int start=0, end=0;
for(int i=0;i<len;++i){
end=max(end, endc[S[i]-'a']); //贪心算法,end取当前start-end内部字符的最后出现位置(这样片段可以尽量多)
if(i==end){ //end一直不变,直到遍历到S[end],说明这里是真正的end
re.push_back(end-start+1);
start=end+1; //start更新,end继续随i变化而变化
}
}
return re;
}
};