
这个题目挺抽象的,翻译成人话:
把字符串切成尽可能多的片段,满足一条铁律:
铁律(必须严格满足):同一个字母,只能出现在同一个片段里,绝对不能跨片段。
这个题目,我们先记录一下每个字母能到的最远位置,然后遍历,记录我们必须到达的最远位置,到了后就停。和跳跃游戏不同的是,由于我们已经能预知未来,所以直接和his_mx比就行,有所不同,多做多t体会~
cpp
class Solution {
public:
vector<int> partitionLabels(string s) {
int n = s.size();
vector<int> far(26, 0), ans;
for(int i=0;i<n;i++)
{
far[s[i] - 'a'] = i;
}
int his_mx = 0, mx = -1;
for(int i=0;i<n;i++)
{
his_mx = max(far[s[i]-'a'], his_mx);
if(i == his_mx)
{
ans.push_back(his_mx-mx);
mx = his_mx;
}
}
return ans;
}
};