划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。 参考下图: 1.确定每个元素的最远距离索引 2.遍历过程若当前索引等于当前遍历路径的最大索引时,说明找到了一个符合要求的子串。
classSolution{publicList<Integer>partitionLabels(String s){int[] hash =newint[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;//记录路径上遍历元素最远距离的索引,初始化未0LinkedList<Integer> res =newLinkedList<>();//用链表存储有序的整数值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;}}