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

LeetCode_贪心算法_中等_763.划分字母区间

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。

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

示例 2:
输入:s = “eccbbbbdec”
输出:[10]

提示:
1 <= s.length <= 500
s 仅由小写英文字母组成

2.思路

(1)贪心算法

3.代码实现(Java)

//思路1————贪心算法
class Solution {public List<Integer> partitionLabels(String s) {int length = s.length();List<Integer> res = new ArrayList<>();//记录每个字母在 s 中最后依次出现的下标int[] lastPos = new int[26];for (int i = 0; i < length; i++) {int index = s.charAt(i) - 'a';lastPos[index] = i;}int start = 0;int end = 0;for (int i = 0; i < length; i++) {end = Math.max(end, lastPos[s.charAt(i) - 'a']);//当前字母在 s 中最后一次出现的下标等于 i,则说明片段 s[start...end] 可以被划分出来if (i == end) {res.add(end - start + 1);start = i + 1;}}return res;}
}
http://www.lryc.cn/news/105595.html

相关文章:

  • 【算法提高:动态规划】1.5 状态压缩DP TODO
  • 建网站一般使用Windows还是liunx好?
  • NodeJs后端项目使用docker打包部署
  • ARM单片机中断处理过程解析
  • 关于SEDEX会员与平台的相关问题汇总
  • 解读Spring-context的property-placeholder
  • 【Rust】枚举类型创建单链表以及常见的链表操作方法
  • Excel 两列数据中相同的数据进行同行显示
  • Windows本地安装配置Qcadoo MES系统
  • 涛思数据与拾贝云达成战略合作,携手赋能工业数字化转型
  • nginx 配置多域名多站点 Ubuntu
  • Docker实践:使用Docker搭建个人开发环境(极简版)
  • SQL从三个表中根据时间分别查询并汇总数量一行展示
  • 同样是跨端框架,React会不会被VUE取代?
  • Excel·VBA定量装箱、凑数值金额、组合求和问题
  • 通过Jmeter压测存储过程
  • Spring笔记之Spring对IoC的实现
  • 【eNSP】Telnet远程登录
  • SOP/详解*和**/python数据结构(iter,list,tuple,dict)/ 解包
  • 使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题
  • 【vue】Vue中debugger报错 unexpected ‘debugger’ statement no-debugger
  • 课题方向a
  • 【Matter】基于Ubuntu 22.04 交叉编译chip-tool
  • Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理
  • 低碳 Web 实践指南
  • 信息安全:网络安全体系 与 网络安全模型.
  • 【云原生】Serverless 技术架构分析
  • Visual Studio Code 设置文件头部添加作者、日期和函数注释
  • HCIA云计算 V5.0题库
  • 基于Matlab实现帧间差分法的运动目标检测(附上完整源码+图像+程序运行说明)