划分字母区间(贪心算法)
给你一个字符串 s
。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s
。
返回一个表示每个字符串片段的长度的列表。
示例 1:
输入:s = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
示例 2:
输入:s = "eccbbbbdec" 输出:[10]
class Solution { public: vector<int> partitionLabels(string s) { //先记录每个字母出现的最后的位置 map<char,int> mp; for(int i=0;i<s.size();i++){ mp[s[i]]=i; } vector<int> res; int start=0,end=0; for(int i=0;i<s.size();i++){ //贪心算法,每遇到一个字符就确定当前位置及之前的所有字符出现的最后的位置的最大值 end = max(end,mp[s[i]]); if(i==end){//说明位置i之前的所有字符在s中出现的最后的位置最大是end,符合题意,可以截取 res.push_back(end-start+1); start = i+1;//更新下一个字符串的起始位置 } } return res; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探