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

题目:

给你一个字符串 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;
    }
相关推荐
不会就选b10 分钟前
算法日常・每日刷题--<动态规划>22
算法·动态规划
释厄62315 分钟前
字画同体论——字即画·几何即字·漫画与小说=文本层
人工智能·算法
沫璃染墨32 分钟前
从零入门数据结构与算法(一):复杂度分析——从算法效率到时间与空间复杂度
c语言·开发语言·数据结构·笔记·算法·飞书
熊猫钓鱼>_>1 小时前
面试出现 606 次的第 K 大,被拆成三个问题问
算法·面试·职场和发展·校招·面经·oj·ai生成
xuxigifxfh1 小时前
牛客:BISHI2 【模板】栈的操作
java·开发语言·windows·算法
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 402. 移掉 K 位数字(单调栈 + 贪心)
c++·算法·leetcode
糖果豆豆2 小时前
对象是字段,还是关系?集合论和范畴论吵了三十年,答案是两个都对
算法·架构
第六种自由2 小时前
[路飞]_Leetcode 22. 括号生成
javascript·算法·leetcode
isyoungboy2 小时前
事件驱动状态机与循环扫描状态机:两种计算模型的比较研究
算法·状态机
行者全栈架构师2 小时前
【鸿蒙心迹】从手机到平板、折叠屏——多端适配自查清单与踩坑实录(HarmonyOS 7.x)
前端·算法·架构