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

题目:

给你一个字符串 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;
    }
相关推荐
顺顺 尼1 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
richard_yuu2 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_32 小时前
LeetCode.225.用队列实现栈
算法
Elaine3362 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
2601_965742222 小时前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营
EatFan2 小时前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
思茂信息3 小时前
CST软件BCI仿真模型及仿真案例
开发语言·单片机·嵌入式硬件·算法·emc
Persistent的粽子!3 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出游戏速通中的“独特初始能量值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质