首先遍历字符串,记录并更新每一个字符最后出现的位置;
再次遍历字符串,记录当前遍历过程中字符的出现最晚位置Max_pos;若Max_pos与当前下标相同,则得到一个分割阈
class Solution {
public:
vector<int> partitionLabels(string S) {
unordered_map<char,int> table;
vector<int> ans;
for(int i=0;i<S.size();i++)
{
table[S[i]]=i;
} //建立hash表,记录每个字母在S中最后一次出现的位置
int flag=INT_MIN;
int last = 0;
for(int i=0;i<S.size();i++)
{
flag=max(flag,table[S[i]]);
if(flag==i)
{
ans.push_back(i+1-last);
last = i+1;
}
}
return ans;
}
};