贪心算法:划分字母区间
参考资料:代码随想录
题目链接:. - 力扣(LeetCode)
题目的解题思路不难理解。分别统计每个字母最后出现的下标,此处有个小技巧,利用ascii码作差得到每个字母的位置。再遍历一遍字符串,到某个字母的最远下标处开始分割,计算长度。
class Solution {public List<Integer> partitionLabels(String s) {int[] hash = new int[26];char[] chars = s.toCharArray();int left = 0;int right = 0;List<Integer> res = new ArrayList<>();for(int i = 0;i < chars.length;i++){hash[chars[i]-'a'] = i;}for(int i = 0;i < chars.length;i++){right = Math.max(right,hash[chars[i]-'a']);if(i == right){res.add(right-left+1);left = right + 1;}}return res;}
}