题目描述:
字符串
S
由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表 。
思路:贪心
代码:
//贪心
vector<int> partitionLabels(string s) {
int n=s.size();
if(n==1)return {1};
vector<int>ans;
unordered_map<char,int>m;//记录每种元素在s中最后出现的下标
for(int i=n-1;i>=0;i--){
if(m.count(s[i])==0)//不存在那就是最后的下标
m[s[i]]=i;
}
for(int i=0;i<n;){
int R=m[s[i]];
for(int j=i+1;j<=R;j++){
R=max(R,m[s[j]]);
}
ans.push_back(R-i+1);
i=R+1;
}
for(auto x:ans)
cout<<x<<" ";
return ans;
}