b_lc_划分字母区间(记录字符最后出现的位置)
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,
同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
输入:S = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
class Solution {
public:
vector<int> partitionLabels(string s) {
vector<int> ans;
int n=s.size(), maxe=0, last=0, m[258], first[258];
memset(m,0,sizeof m), memset(first, -1, sizeof first);
for (int i=0; i<n; i++) m[s[i]]=i;
for (int i=0; i<n; i++) {
maxe=max(maxe, m[s[i]]); //核心
if (i==maxe) {
ans.push_back(maxe-last+1);
last=i+1;
}
}
return ans;
}
};