larscheng / algo

0 stars 0 forks source link

【Check 79】2024-05-21 - 763. 划分字母区间 #185

Open larscheng opened 1 month ago

larscheng commented 1 month ago

763. 划分字母区间

larscheng commented 1 month ago

思路

贪心算法

代码


    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 start = 0, end = 0;
        List<Integer> result = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            //不断更新片段边界
            end = Math.max(end, last[s.charAt(i) - 'a']);
            //遍历到边界时,收集片段长度,重置开始位置
            if (i == end) {
                result.add(end - start + 1);
                start = end + 1;
            }
        }
        return result;
    }
}

复杂度