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

Leetcode 划分字母区间

在这里插入图片描述

题目要求:

将字符串 s 划分成尽量多的片段,保证每个片段中出现的字母不会出现在其他片段中。

具体解释如下:

  1. 尽量多的片段:题目要求的是在划分过程中,我们要尽量让划分的片段数量最大化,而不是最少化。每次划分的片段应当符合下述条件。

  2. 字母不会出现在其他片段中:对于每个划分出的片段,片段中的每个字母只能在该片段内出现,不能在其他片段中再出现。换句话说,每个字母都必须包含在一个完整的片段中,且不能跨越多个片段。

划分过程:

为了满足这个要求,划分的基本思路是:

  • 从头开始遍历字符串,对于当前遇到的字符,找到它在字符串中最后一次出现的位置。
  • 继续遍历,更新片段的结束位置(当前片段中所有字符的最远出现位置)。
  • 当遍历到的字符索引正好是该片段的结束位置时,就可以划分出一个片段。
  • 然后继续处理剩下的字符串,直到整个字符串都被划分完毕。

这种做法能保证每个片段中的所有字母都只出现在这个片段中,同时也能保证片段数量是最多的。

举个例子:

对于字符串 s = "ababcbacadefegdehijhklij",划分过程如下:

  1. 从第一个字符 'a' 开始,找到 'a' 的最后出现位置是索引 8,同时还要考虑字符 'b''c' 的最后出现位置是索引 5 和 7。因此,第一个片段应该是从索引 0 到索引 8,片段为 "ababcbaca"

  2. 接着从索引 9 开始,处理下一个字符 'd',找到 'd' 的最后出现位置是索引 14,字符 'e' 的最后位置是索引 15。所以第二个片段是从索引 9 到索引 15,片段为 "defegde"

  3. 最后,处理从索引 16 开始的部分,字符 'h''i''j' 的最后出现位置分别是索引 19、22 和 23。因此第三个片段是从索引 16 到索引 23,片段为 "hijhklij"

因此,最终的划分结果为:[9, 7, 8],即 "ababcbaca""defegde""hijhklij"

这种划分方式能确保每个片段中的字母不会出现在其他片段中,并且片段的数量是最大化的。

java solution

class Solution {public List<Integer> partitionLabels(String s) {List<Integer> result = new ArrayList<>();int[] lastIndex = new int[26];//统计 s 中每个字符的最后出现位置下标for(int i = 0; i < s.length(); ++i) {lastIndex[s.charAt(i) - 'a'] = i;}int start = 0, end = 0;for(int i = 0; i < s.length(); ++i) {//先根据当前字符的最后出现位置下标更新endend = Math.max(end, lastIndex[s.charAt(i) - 'a']);if(i == end) {result.add(end - start + 1);start = end + 1;}}return result;}
}
http://www.lryc.cn/news/460220.html

相关文章:

  • 可编辑div遇到的那些事
  • 什麼是高速HTTP代理?
  • 三子棋(C 语言)
  • HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
  • 纯血鸿蒙启动公测,爱加密鸿蒙加固平台发布,助力鸿蒙应用安全运营!
  • MySQL中 truncate、drop和delete的区别
  • 什么开放式耳机值得买?开放式耳机推荐排行榜!
  • Apache Doris的分区与分桶详解
  • docker详解介绍+基础操作 (二)info详解
  • C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
  • 探索 C# 常用第三方库与框架
  • NodeJS GRPC简单的例子
  • 无人机之三维航迹规划篇
  • 风格迁移-StyTr 2 : Image Style Transfer with Transformers
  • 上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • 记录搜罗到的Matlab 对散点进行椭圆拟合
  • 分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
  • 文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
  • redis在项目中运用(基础)
  • libaom 源码分析系列:svc_encoder_rtc.cc 文件
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • MySQL Server、HeidiSQL(MySQL 数据库工具)
  • 矩阵相关算法
  • 微信小程序-封装通用模块
  • Modnet 人像抠图(论文复现)
  • 利用session机制造测试账号,无需前端也可以测试后端接口
  • JAVA_18
  • Linux升级openssl版本
  • 多态对象的存储方案小结
  • Linux 之 nano 编辑器