- 划分字母区间
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。
参考下图:
1.确定每个元素的最远距离索引
2.遍历过程若当前索引等于当前遍历路径的最大索引时,说明找到了一个符合要求的子串。
文章来源地址https://www.toymoban.com/news/detail-690629.html
class Solution {
public List<Integer> partitionLabels(String s) {
int[] hash = new int[26];//26个字母范围内
char[] chars = s.toCharArray();//将字符串转化为字符数组,便于遍历操作
for (int i = 0; i < chars.length; i++) {
hash[chars[i] - 'a'] = i;//记录遍历过每个元素出现位置的最远距离对应的下标索引
}
int left = 0;//初始化第一个子串的起点
int idx = 0;//记录路径上遍历元素最远距离的索引,初始化未0
LinkedList<Integer> res = new LinkedList<>();//用链表存储有序的整数值
for (int i = 0; i < chars.length; i++) {
idx = Math.max(idx, hash[chars[i] - 'a']);//当前元素最远出现边界,遍历并取当前路径上最大的进行记录
if (i == idx) {//找到了符合条件的
res.add(idx - left + 1);//返回满足条件子串的长度
left = i + 1;//更新下一个子串的起点
}
}
return res;
}
}
文章来源:https://www.toymoban.com/news/detail-690629.html
到了这里,关于划分字母区间【贪心算法】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!