美文网首页
1520. 最多的不重叠子字符串

1520. 最多的不重叠子字符串

作者: 来到了没有知识的荒原 | 来源:发表于2020-07-29 09:27 被阅读0次

1520. 最多的不重叠子字符串

贪心

class Solution {
public:
    struct Seg{
        int l,r;
        bool operator< (const Seg &s) const{
            if(r!=s.r)return r<s.r;
            return l<s.l;
        }
    };

    vector<string> maxNumOfSubstrings(string s) {
        vector<Seg>segs(26,(Seg){-1,-1});

        for(int i=0;i<s.size();i++){
            int c=s[i]-'a';
            if(segs[c].l==-1) segs[c].l=segs[c].r=i;
            segs[c].r=i;
        }

        for(int i=0;i<26;i++){
            if(segs[i].l!=-1){
                for(int j=segs[i].l;j<=segs[i].r;j++){
                    int c=s[j]-'a';
                    if(segs[i].l<=segs[c].l && segs[i].r>=segs[c].r)continue;
                    segs[i].l=min(segs[i].l,segs[c].l);
                    segs[i].r=max(segs[i].r,segs[c].r);
                    j=segs[i].l;
                }
            }
        }

        sort(segs.begin(),segs.end());

        vector<string>res;
        int end=-1;
        for(int i=0;i<26;i++){
            int l=segs[i].l,r=segs[i].r;
            if(segs[i].l==-1)continue;
            if(end==-1 || l>end){
                res.push_back(s.substr(l,r-l+1));
                end=r;
            }
        }

        return res;
    }
};

相关文章

网友评论

      本文标题:1520. 最多的不重叠子字符串

      本文链接:https://www.haomeiwen.com/subject/lgkcrktx.html