力扣763题(划分字母区间)

763、划分字母区间

基本思想:

贪心

具体实现:

1.统计每一个字符最后出现的位置

2.用i从头遍历字符,idx记录这些字符更靠后的最后出现的位置

比如图中a最后出现的位置是8,b最后出现的位置是5,idx记录8

分割点就是i == idx时,i的值

代码:

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> list = new LinkedList<>();
        int[] edge = new int[123];
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++){
            edge[chars[i] - 0] = i;
            //edge里面存放的是所有字符在chars这个数组中最后出现的位置
            //edge的下标对应字符的ascii
            //比如[abca]这个数组对应的edge就是
            //[.....301.....] 3在第97位,a的ascii是97,a在数组中最后的位置下标是3
        }
        int idx = 0;
        int last = -1;
        for (int i = 0; i < chars.length; i++){
            idx = Math.max(idx, edge[chars[i] - 0]);
            if (i == idx) {
                list.add(i - last);
                last = i;
            }
        } 
        return list;
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15455577.html