news 2026/4/23 12:23:59

LeetCode热题100--763. 划分字母区间--中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode热题100--763. 划分字母区间--中等

题目

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 “ababcc” 能够被分为 [“abab”, “cc”],但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

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

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

题解

classSolution{publicList<Integer>partitionLabels(StringS){char[]s=S.toCharArray();intn=s.length;int[]last=newint[26];for(inti=0;i<n;i++){last[s[i]-'a']=i;// 每个字母最后出现的下标}List<Integer>ans=newArrayList<>();intstart=0,end=0;for(inti=0;i<n;i++){end=Math.max(end,last[s[i]-'a']);// 更新当前区间右端点的最大值if(end==i){// 当前区间合并完毕ans.add(end-start+1);// 区间长度加入答案start=i+1;// 下一个区间的左端点}}returnans;}}

解析

出自:本质是合并区间,简洁写法(Python/Java/C++/C/Go/JS/Rust)

classSolution{//定义一个新的解决方案类publicList<Integer>partitionLabels(StringS){//partitionLabels是接收字符串S的方法char[]s=S.toCharArray();//将输入的字符串转换为字符数组's'intn=s.length;//获取字符串的长度'n'并保存到变量中int[]last=newint[26];//初始化一个大小为26的整型数组,表示英文字母表中的每个字母的索引。这个将用于获取最后出现的下标值for(inti=0;i<n;i++){//循环遍历整个s数组last[s[i]-'a']=i;//每次迭代时,更新字符在输入字符串中的索引位置。这里通过计算字母在英文字母表中的索引值来实现。比如在最后出现了'd'字符,就找到了它的最远索引}List<Integer>ans=newArrayList<>();//初始化一个空的数组列表以存储最终答案intstart=0,end=0;//定义变量start和end为区间的起点和终点。这两个点表示可能包含最多不重复字母的子串/区间,即我们要找的划分/区间for(inti=0;i<n;i++){//再次从头开始循环遍历整个s数组。这个循环用于确定每个可能区间的结束点end=Math.max(end,last[s[i]-'a']);//当前字母/字符的最后出现的位置和已经迄今为止找到的最远位置(比如'd'在这里表示一个子串中的最大索引,它将一直增加直到达到所有部分或数组末尾)if(end==i){//如果当前确定的区间(从start到end之间包括这两个点)结束的位置等于当前迭代器'i'表示的字符,意味着没有重复/公共字母存在。因为在给定子串中只有这个部分包含所有唯一字母ans.add(end-start+1);//将长度加入答案列表(end-start+1,因为在Java中数组索引从0开始)start=i+1;//移动到下一个区间的起点。'i +1'确保我们向前移动一步到达下一个字母/字符的位置,并成为新的区间或子串的起始点}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 14:31:48

模型下载慢影响项目进度?Open-AutoGLM三大加速策略立即生效

第一章&#xff1a;模型下载慢影响项目进度的根源分析在深度学习和人工智能项目的开发过程中&#xff0c;模型下载是构建可复现系统的关键前置步骤。然而&#xff0c;许多团队频繁遭遇模型下载速度缓慢的问题&#xff0c;直接导致训练任务延迟、CI/CD 流水线阻塞&#xff0c;甚…

作者头像 李华
网站建设 2026/4/23 8:44:43

leetcode 2092(排序+bfs)

2092: 找出知晓秘密的所有专家思路&#xff1a;排序bfs广度优先搜索假设一开始 0 和 1 知道秘密。对比如下两种情况&#xff1a;时间 1&#xff0c;1 和 2 开会。时间 2&#xff0c;2 和 3 开会。秘密会传播给 2 和 3&#xff0c;最终 0,1,2,3 都知道秘密。时间 1&#xff0c;2…

作者头像 李华
网站建设 2026/4/22 13:26:31

30分钟极速入门:LanceDB Java客户端实战指南

30分钟极速入门&#xff1a;LanceDB Java客户端实战指南 【免费下载链接】lancedb Developer-friendly, serverless vector database for AI applications. Easily add long-term memory to your LLM apps! 项目地址: https://gitcode.com/gh_mirrors/la/lancedb LanceD…

作者头像 李华
网站建设 2026/4/22 1:14:21

Obsidian主题定制终极指南:打造高效知识管理界面

Obsidian主题定制终极指南&#xff1a;打造高效知识管理界面 【免费下载链接】obsidian-california-coast-theme A minimalist obsidian theme inspired by macOS Big Sur 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-california-coast-theme Obsidian作为现…

作者头像 李华
网站建设 2026/4/18 0:13:48

Verl项目vLLM多GPU部署实战:5大挑战与高效解决方案

Verl项目vLLM多GPU部署实战&#xff1a;5大挑战与高效解决方案 【免费下载链接】verl verl: Volcano Engine Reinforcement Learning for LLMs 项目地址: https://gitcode.com/GitHub_Trending/ve/verl Verl项目作为火山引擎推出的强化学习框架&#xff0c;在大规模语言…

作者头像 李华
网站建设 2026/4/23 11:39:44

PostIn安装配置:轻量接口管理工具实操

给大家介绍一款开源免费的接口管理工具 - PostIn&#xff0c;支持免费私有化部署&#xff0c;一键安装零配置&#xff0c;包含项目管理、接口调试、接口文档设计、MOCK、接口用例、性能测试、测试计划等模块&#xff0c;页面设计简洁易用&#xff0c;本文将介绍如何快速安装配…

作者头像 李华