Tc : O(nlogn) for sorting the intervals array + O(25) for other iterations
Sc :O(n) for using List
class Solution {
public List<Integer> partitionLabels(String s) {
int intervals[][] = new int[26][2];
for(int i =0;i<intervals.length;i++){
intervals[i][0] = 501;
intervals[i][1] = -1;
}
for(int i = 0;i<s.length();i++){
char c = s.charAt(i);
int index = c-'a';
intervals[index][0] = Math.min(intervals[index][0],i);
intervals[index][1] = Math.max(intervals[index][1],i);
}
//sorting
Arrays.sort(intervals,(a,b)-> a[0]-b[0]);
//merging
int start = intervals[0][0];
int end = intervals[0][1];
List<Integer> list = new ArrayList<>();
for(int i =1;i<intervals.length;i++){
if(intervals[i][0]==501) break;// exit as no need to traverse any further
if(end >= intervals[i][0]){
start = Math.min(intervals[i][0],start);
end = Math.max(intervals[i][1],end);
}
else{
list.add(end-start+1); // instead of keeping the range [start, end] in the list we are addting their sizes
start = intervals[i][0];
end = intervals[i][1];
}
}
list.add(end-start+1);
return list;
}
}
Top comments (0)