2025年- H78-Lc186--763.划分字符串区间(贪心)--Java版

1.题目描述

2025年- H78-Lc186--763.划分字符串区间(贪心)--Java版_第1张图片

2.思路

(1)存储子串的索引和该字符出现的最远位置

2025年- H78-Lc186--763.划分字符串区间(贪心)--Java版_第2张图片

3.代码实现

class Solution {
    public List<Integer> partitionLabels(String s) {
    
    //初始化一个字母索引的数组,总共26个字母
    int[] letterIndex=new int[26];
    //把每个字母出现的最远下标进行标记。用assii码计算
    for(int i=0;i<s.length();i++)
    {//Java 中字符串 s 不能像数组 s[i] 那样访问字符,应该使用 s.charAt(i)。
        letterIndex[s.charAt(i)-'a']=i;//例子:比如可以得到每个a的索引,最终最远的a会将起始a覆盖。
    }
    int n=s.length();
    //遍历字符串,寻找区间的分割点
    List<Integer> result=new ArrayList<>();
    //定义左右指针
    int left=0;
    int right=0;
    for(int i=0;i<s.length();i++)
    {
    //不断更新右边界,取一个最大值
    right=Math.max(right,letterIndex[s.charAt(i)-'a']);
    //当我们遍历到最远处的时候
    if(i==right)
    {
    //result数组里面存放区间的长度
    result.add(right-left+1);
     //更新left指针,找下一个区间,也就是right边界右邻居
    left=i+1;
    }
   
    }
    //最后返回结果数组。
       return result; 
    }
}

你可能感兴趣的:(leetcode,java,java,开发语言)