Partition Labels — Greedy Interval Merge
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