贪心算法---划分字母区间

题目:

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s

返回一个表示每个字符串片段的长度的列表。

思路:非贪心思路

先遍历一遍字符串记录所有字母最后出现的下标,再遍历一遍字符串更新字符出现的最远下标,如果找到字符最远出现的位置下标和当前下标相等,则找到了分割点。

代码:

java 复制代码
    public List<Integer> partitionLabels(String s) {
        int hash[]=new int[26];//记录每个字符的最后一次出现的下标
        List<Integer> result=new LinkedList<>();//记录最后的结果
        char[] chars=s.toCharArray();
        for(int i=0;i<chars.length;i++){
            hash[chars[i]-'a']=i;
        }
        int left=0;//记录区间的左边界
        int right=0;//记录区间的右边界
        for(int i=0;i<chars.length;i++){
            right=Math.max(right,hash[chars[i]-'a']);//更新区间的最右边界
            if(i==right){
                result.add(right-left+1);//将该区间的长度加入结果集
                left=i+1;//更新下一个区间的左边界
            }
        }
        return result;
    }
相关推荐
hanhahai39 分钟前
指针与函数(函数指针与指针函数)
算法
ValhallaCoder1 小时前
Leetcode-hot100(2026.08.17)
python·算法·leetcode
泡沫冰@1 小时前
GO 语言基础
开发语言·算法·golang
luj_17682 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场2 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
马可家的菠萝3 小时前
Vue3 + Canvas 手绘笔记工程化实践:别把画布只当成一张 PNG
前端·vue.js·算法
watersink3 小时前
机器学习极大似然估计与EM算法
人工智能·算法·机器学习
叠层归一研究院3 小时前
如何用程序搭建一个 AGI 种子系统(一):从向量种子到无限生长引擎
人工智能·python·算法·机器学习·agi
科学实验家3 小时前
并 查集
算法
xiaohebang3 小时前
流失预测模型设计:行为特征分析算法选型
大数据·数据结构·经验分享