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

题目:

给你一个字符串 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;
    }
相关推荐
顶点多余4 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源5 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
罗西的思考6 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60166 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘7 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
维克兜率天9 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
AI情绪识别开源10 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶11 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b11 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生11 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试