医院网站开发百度文库,人寿保险网站,乐清网络科技有限公司,上海专业网站建设网划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段#xff0c;同一字母最多出现在一个片段中。 注意#xff0c;划分结果需要满足#xff1a;将所有划分结果按顺序连接#xff0c;得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。…划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段同一字母最多出现在一个片段中。 注意划分结果需要满足将所有划分结果按顺序连接得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。 参考下图 1.确定每个元素的最远距离索引 2.遍历过程若当前索引等于当前遍历路径的最大索引时说明找到了一个符合要求的子串。 class Solution {public ListInteger 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;//记录路径上遍历元素最远距离的索引初始化未0LinkedListInteger 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;}
}