Partition Labels — Greedy Interval Merge

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem

Partition string s into as many parts as possible so each letter appears in at most one part.


Solutions

Python

class Solution:
    def partitionLabels(self, s: str) -> list[int]:
        last={c:i for i,c in enumerate(s)}
        start=end=0; result=[]
        for i,c in enumerate(s):
            end=max(end,last[c])
            if i==end: result.append(end-start+1); start=i+1
        return result

C++

class Solution {
public:
    vector<int> partitionLabels(string s){
        vector<int> last(26,0);
        for(int i=0;i<s.size();i++) last[s[i]-'a']=i;
        vector<int> res; int start=0,end=0;
        for(int i=0;i<s.size();i++){
            end=max(end,last[s[i]-'a']);
            if(i==end){res.push_back(end-start+1);start=i+1;}
        }
        return res;
    }
};

Complexity

  • Time: O(n) | Space: O(26) = O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro