当前位置: 首页 > news >正文

【LeetCode: 划分字母区间】贪心算法

目 录

一、题目描述

二、题目解答

2.1 思路

2.2 代码

三、总结


一、题目描述

给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串"ababcc"能够被分为["abab", "cc"],但类似["aba", "bcc"]["ab", "ab", "cc"]的划分是非法的。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。

示例 1:输入:s = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。

二、题目解答

2.1 思路

这道题的核心就在于同一个字母不能出现在两个片段中,而且切片的顺序不能乱,不能东切一片西切一片滴。所以我们可以计算出每个字母最后出现的顺序然后去切片。

思路:1. 定义一个长26的数组,遍历字符串,把字符串中的字母最后出现的位置记录下来

2. 定义起始量和结尾量还有最重要返回的列表

3. 遍历字符串,对当前字符更新 end = max(end,count[c])

若 i = end,就说明已经到达最大位置了,得分片了。这里要做两件事情:计算出当前切片长度并更新起始点位置

4. 返回结果

2.2 代码

class Solution { public List<Integer> partitionLabels(String s) { int[] count = new int[26]; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); count[c - 'a'] = i; } List<Integer> result = new ArrayList<>(); int start = 0; int end = 0; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); end = Math.max(end,count[c - 'a']); if(i == end){ int length = end - start + 1; result.add(length); start = end + 1; } } return result; } }

三、总结

这道题核心在于要记录每个字母的最后出现位置;在遍历字符串时,需要维护当前片段的“最远结束位置”;当遍历到当前片段的末尾时,就切一段。

http://www.jsqmd.com/news/723544/

相关文章:

  • 时间晶体管理:软件测试从业者的前沿视角
  • 量子计算在数据可视化中的革命性应用
  • 终极跨平台模组下载方案:WorkshopDL让非Steam平台玩家也能畅享创意工坊
  • 洛谷 P1305:新二叉树 ← DFS + 哈希表优化
  • Windows上的安卓应用安装神器:APK Installer全面指南
  • 【超详细】Allan偏差+PSD八大可视化一文吃透:随机游走频率噪声从原理到画图全流程(附公式与工程避坑)
  • 魔兽争霸3终极助手:WarcraftHelper完整配置与功能详解指南
  • 倒计时126天:谷歌静默更新将彻底剥夺你的安卓所有权
  • 2026届学术党必备的降重复率网站横评
  • ARM中断控制器优先级寄存器解析与实战
  • 2026年围挡仿真草坪厂家选型推荐:仿真植物景观哪家好,仿真绿植造景,仿真草坪公司,仿真草坪哪家好,排行一览! - 优质品牌商家
  • 2026年Q2出国务工派遣服务核心能力深度解析 - 优质品牌商家
  • 5步掌握semi-utils:专业照片批量水印处理终极指南
  • 批量图片下载终极指南:3分钟学会高效采集Google、Bing、百度图片资源
  • 别再只会ChatGPT了!用Langchain+文心大模型,5步搭建你的专属知识库AI助手
  • Beyond Compare 5密钥生成器:三步获取永久授权的终极指南
  • 深入解析Google API变迁:从Plus到People
  • 2026届学术党必备的降重复率方案推荐
  • RimSort:告别《环世界》模组混乱的终极解决方案
  • 从‘漏电’看芯片可靠性:射频芯片Leakage测试的完整流程与参数优化心得
  • OO Unit 2 总结博客
  • 算法训练营Day18|有效的括号
  • 告别‘接口依赖’!用SoapUI 5.7.0快速搭建WebService本地Mock服务(附WSDL文件实战)
  • 数据人的工具瘾——以为在学新东西,其实在换皮
  • 2026钢结构精神堡垒技术解析:靠谱厂家判定与选型推荐 - 优质品牌商家
  • UDS诊断开发避坑指南:这10个否定响应码(NRC)你踩过几个?
  • 茉莉花Zotero插件:一键抓取中文文献元数据的终极解决方案
  • 如何解决预检查网络失败_runcluvfy阶段报错忽略与修复
  • tModLoader:解锁泰拉瑞亚无限可能的魔法钥匙
  • 基于OpenClaw框架构建多智能体协作系统:从原理到实践