思路:用map记录每个字母最后一次出现的位置
class Solution {
public:
vector<int> partitionLabels(string S)
{
vector<int> v;
unordered_map<char,int> m;
//通过map记录每一个字母的最后位置
for(int i=0;i<S.size();i++)
{
m[S[i]]=i;
}
int p1=0;
int p2=0;
for(int i=0;i<S.size();i++)
{
p2=max(m[S[i]],p2); //扩展遍历到的所有字母的右边界
if(i==p2)
{
v.push_back(p2-p1+1);
p1=p2+1;
}
}
return v;
}
};