0763 - Partition Labels

0763 - Partition Labels

You are given a string s. We want to partition the string into as many parts as possible so that each letter appears in at most one part.

Return a list of integers representing the size of these parts.

Examples

Input: s = "ababcbacadefegdehijhklij"

Output: [9,7,8]

Explanation: The partition is "ababcbaca", "defegde", "hijhklij". This is a partition so that each letter appears in at most one part. A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits s into less parts.

Input: s = "eccbbbbdec"

Output: [10]

Constraints

  • 1 <= s.length <= 500

  • s consists of lowercase English letters.

Java Solution

class Solution {
    public List<Integer> partitionLabels(String S) {
        int[] last = new int[26];
        for(int i = 0; i < S.length(); i++) {
            last[S.charAt(i) - 'a'] = i;
        }
        
        int partitionStart = 0, partitionEnd = 0;
        List<Integer> result = new ArrayList<>();
        
        for(int i = 0; i < S.length(); i++) {
            partitionEnd = Math.max(partitionEnd, last[S.charAt(i) - 'a']);
            if(i == partitionEnd) {
                result.add(partitionEnd - partitionStart + 1);
                partitionStart = i+1;
            }
        }
        return result;
    }
}

Last updated