leetcode 763. 划分字母区间 中等 贪心

题目:
在这里插入图片描述

分析:题目要求最尽可能多的划分片段,自然想到贪心算法。并且题目要求每个字母只会出现在其中一个片段,那么贪心就可以这么做,从第一个字母开始,这个字母最后一次出现一定包含在这个片段当中,但头尾两个位置中间可能还有其它字母,那么这个片段也要把这些字母的最后一次出现包括进去。
用一个数组记录每个字母最后一次出现的位置,用两个变量分别记录这一个片段的开始和结束位置,并且结束位置是会随着遍历字符串更新的

代码:

class Solution {
    public List<Integer> partitionLabels(String S) {
        if(S == null || S.length() == 0){
            return new ArrayList<>();
        }
        int[] lastIndex = new int[26];
        for(int i = 0; i < S.length(); i++){
            //记录s中每个字母最后出现的位置
            lastIndex[S.charAt(i) - 'a'] = i;
        }
        int start = 0;
        int end = 0;
        List<Integer> result = new ArrayList<>();
        for(int i = 0; i < S.length(); i++){
            end = Math.max(end, lastIndex[S.charAt(i) - 'a']);
            if(i == end){
                result.add(i-start+1);
                start = i+1;
            }
        }
        return result;
    }
}

在这里插入图片描述
在这里插入图片描述

发布了134 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40208575/article/details/105162382