14贪心:划分字母区间

14贪心:划分字母区间

763.划分字母区间

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。

可以分为如下两步:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
class Solution {
    public List<Integer> partitionLabels(String s) {
        //初见题目困惑:怎么知道在哪里停止
        int[] edge = new int[26];
        List<Integer> res = new ArrayList<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            edge[chars[i] - 'a'] = i;
        }

        int end = 0;
        int len = 0;
        for(int i = 0; i < chars.length; i++) {
            end = Math.max(edge[chars[i] - 'a'], end);
            len++;
            if(end == i) {//到达分割点
                res.add(len);
                len = 0;
            }
        }

        return res;
    }
}

你可能感兴趣的:(算法刷题笔记,贪心算法)