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;
    }
};
posted @ 2020-10-22 22:20  童年の波鞋  阅读(94)  评论(0编辑  收藏  举报