具体思想:
披着皮的区间合并,没什么可说的;
直接记录开始和结束区间排序即可;
具体代码:
class Solution {
public:
vector<int> partitionLabels(string s) {
int cnt=0;
vector<vector<int>> dic(26,{600,600});
vector<vector<int>> newgap;
vector<int>ret;
for(int i=0;i<s.size();i++){
int index=s[i]-'a';
if(dic[index][0]==600){
dic[index][0]=i;
cnt++;
}
dic[index][1]=i;
}
sort(dic.begin(),dic.end(),[](vector<int>& v1,vector<int>& v2){
return v1[0]<v2[0];
});
int start=dic[0][0],end=dic[0][1];
for(int i=1;i<cnt;i++){
if(dic[i][0]>end){
newgap.push_back({start,end});
start=dic[i][0];
end=dic[i][1];
}else{
end=max(end,dic[i][1]);
}
}
newgap.push_back({start,end});
for(auto v:newgap){
ret.push_back(v[1]-v[0]+1);
}
return ret;
}
};