要求:把字符串划分为尽可能多的片段,且同一字母最多出现在一个片段,返回每个片段长度
思路:片段结尾必然是某个字符最后一次出现的下标,所以先从后遍历找到每个字符最后一次出现的下标记在map里。然后从0开始遍历,不停更新片段结尾即可
class Solution {
public:
vector<int> partitionLabels(string s) {
//先从后遍历确定每个字符最后出现的位置
unordered_map<char,int> m;
int n=s.length();
for(int i=n-1;i>=0;--i)
if(m.count(s[i])==0)
m[s[i]]=i;
int index=0;
vector<int> res;
while(index<n){
int lastindex=m[s[index]];//本个片段最后一位
int start=index;
while(index<=lastindex){
if(m[s[index]]>lastindex)
lastindex=m[s[index]];
++index;
}
res.push_back(index-start);
}
return res;
}
};