---
# System prepended metadata

title: 0763. Partition Labels
tags: [Leetcode, FaceBook, Merge Interval-Jump Game, Medium]

---

# 0763. Partition Labels
###### tags: `Leetcode` `Medium` `FaceBook` `Merge Interval-Jump Game`
Link: https://leetcode.com/problems/partition-labels/
## 思路 $O(N)$ $O(1)$
首先traverse一次，记录每个字母最后出现的位置
然后首先拿一个字母，看它最后出现的位置在哪，于是产生了一个substring，遍历这个substring不断扩充这个partition的长度，直到不再扩充了，就把长度加进答案里面，以此循环。
和[55.Jump Game](https://hackmd.io/BLDJgdvVR2yk2ZZka2dArg) merge的思路很像
## Code
```java=
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 idx = 0;
        List<Integer> ans = new ArrayList<>();
        int prev = 0;
        while(idx<s.length()){
            int end = last[s.charAt(idx)-'a'];
            for(;idx<=end && idx<s.length();idx++){
                end = Math.max(end, last[s.charAt(idx)-'a']);
            }
            ans.add(idx-prev);
            prev = idx;
        }
        return ans;
    }
}
```