Partition Labels - codepath/compsci_guides GitHub Wiki

Unit 3 Session 2 (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • What should my function return if the string is empty?
    • In this case, return an empty list.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: First, create a map of each element -> its latest index. Then loop through the string, keeping track of the last appearance and current index. When they match, add the partition.

1) First, create a map of element -> latest index
2) Create an empty list, and set start and end to 0
3) For each index and char in the string:
  a) if last_index[char] is larger, update end
  b) if current index and end are equal
    i) add the partition to the list
   ii) move start to index+1
4) Return the partition list

I-mplement

def partition_labels(s):
    last_index = {}
    for idx, char in enumerate(s):
        last_index[char] = idx
        
    partitions = []
    start = 0
    end = 0

    for i, char in enumerate(s):
        end = max(end, last_index[char])
        if i == end:
            partitions.append(end - start + 1)
            start = i + 1

    return partitions