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

【Hot 100 刷题计划】 LeetCode 763. 划分字母区间 | C++ 贪心算法题解

LeetCode 763. 划分字母区间 | C++ 贪心算法题解

📌 题目描述

题目级别:中等

给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

  • 例如,字符串"ababcc"能够被分为["abab", "cc"],但类似["aba", "bcc"]["ab", "ab", "cc"]的划分是非法的。

注意:划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s
返回一个表示每个字符串片段的长度的列表。


💡 解题思路:贪心算法

要满足“同一字母最多出现在一个片段中”,核心逻辑是:一旦某个字母出现在当前的片段中,那么这个片段的右边界,至少要扩展到该字母在整个字符串中最后一次出现的位置

我们可以通过两次遍历完美解决(贪心策略):

1. 记录每个字母的“最远边界”

首先遍历一次字符串s,使用一个数组或哈希表记录下每个字母最后一次出现的下标位置。

2. 动态维护当前片段的右边界

使用双指针l(当前片段的左端点)和r(当前片段的右端点),再次遍历字符串:

  • 每次遇到一个字母s[i],我们就去查它的最后出现位置,并尝试更新当前片段的右边界:r = max(r, 该字母最后出现的位置)
  • 高光时刻(切分条件):当我们继续往后遍历,直到遍历指针i走到了当前片段的右边界r(即i == r)时,说明当前片段内的所有字母,在后面都不会再出现了!这时我们就可以安心地在这里“切一刀”。
  • 记录下当前片段的长度r - l + 1,并将左指针l更新为r + 1,准备寻找下一个片段。

💻 C++ 代码实现

classSolution{public:vector<int>partitionLabels(string s){intn=s.size();// 记录每个小写字母最后一次出现的下标// 开辟大小为 30 的数组(26 个字母足够,30 防溢出)vector<int>last(30);for(inti=0;i<n;i++){last[s[i]-'a']=i;}vector<int>res;intl=0;// 当前片段的左边界intr=0;// 当前片段的右边界for(inti=0;i<n;i++){// 不断刷新当前片段必须包含的最远右边界r=max(r,last[s[i]-'a']);// 当遍历到右边界时,说明 [l, r] 内的所有字母都不会在更后面出现了if(i==r){res.push_back(r-l+1);// 记录当前片段长度l=r+1;// 开启下一个片段}}returnres;}};
http://www.jsqmd.com/news/510666/

相关文章:

  • 2026年靠谱的3-氟-4-氨基苯酚厂家推荐:3-氟-4-氨基苯酚盐酸盐/高纯度3-氟-4-氨基苯酚/医药用3-氟-4-氨基苯酚厂家推荐参考 - 品牌宣传支持者
  • 56:XSS攻防博弈:从CSP策略到Filter绕过的实战推演
  • QuickBMS深度解析:游戏资源提取与逆向工程的瑞士军刀
  • 2026年热门的景观膜结构车棚品牌推荐:污水池膜结构车棚/自行车膜结构车棚/停车场膜结构车棚高评价厂家推荐 - 行业平台推荐
  • 踩坑复盘:弃MySQL选PostgreSQL,地理数据存储终于不头疼了
  • 2026年比较好的KCB齿轮油泵厂家推荐:YCB齿轮油泵/LQB沥青齿轮油泵/NCB高粘度内齿轮油泵人气实力厂商推荐 - 行业平台推荐
  • Pixel Dimension Fissioner开源镜像:免编译部署,支持A10/A100/V100全适配
  • 如何借助开源字体实现专业级排版?——EB Garamond 12复古字体全维度应用指南
  • C++ 基础核心知识
  • 【Python基础入门】第四课: 函数
  • 国家级认证 信息系统项目管理师(软高)一站式通关课程
  • 有哪些机构可以颁发信创产品评估证书?
  • 低轨卫星星间链路同步难题终结方案:基于IEEE 1588v2 PTP精简版的C实现(支持±50ns时间戳校准,已在银河航天02星稳定运行14个月)
  • 2026年知名的饲料厂家推荐:教槽饲料厂家推荐与采购指南 - 行业平台推荐
  • 【复现】同时考虑考虑孤岛与重构的配电网故障恢复运行策略附Matlab代码
  • 写作效率翻倍,Typora 1.12.3 最新版本更新安装
  • 2026年比较好的挂篮模板厂家推荐:隧道挂篮/公路挂篮厂家选择参考建议 - 行业平台推荐
  • 剪流AI手机受欢迎程度怎么样?深度解析其精准数据获客之道
  • 异步编程优化:从底层源码看最佳实践
  • Pixel Dimension Fissioner基础教程:理解‘维度裂变’本质——零样本改写的底层逻辑
  • 2026年知名的语音扬声器工厂推荐:同轴吸顶扬声器/广东线性阵列扬声器/广东阵列中低频扬声器实力工厂推荐 - 行业平台推荐
  • Pixel Dimension Fissioner实战:结合RAG实现领域知识约束的维度裂变
  • VibeVoice实测分享:4人辩论脚本生成,角色音色分明不串戏
  • Sigfox_Com轻量库:嵌入式Sigfox通信快速集成指南
  • 2026年股吧负面紧急公关品牌推荐:公关培训/公关服务/厦门公关服务生产厂家推荐几家 - 行业平台推荐
  • 日语考级资源合集
  • 开箱即用的语音合成:CosyVoice-300M Lite部署与使用全攻略
  • [python] asyncio常规操作记录
  • 2026年质量好的系统品牌推荐:广东矩阵系统实力品牌厂家推荐 - 行业平台推荐
  • 嵌入式音频必看:AU-48 模组彻底解决噪音、回音、啸叫难题