news 2026/5/11 18:06:59

力扣 划分字母区间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣 划分字母区间

题目:

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

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

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

解答:

1️⃣ 问题本质

题目要求把字符串划分成若干连续区间,使得:

每个字母只出现在其中一个区间内

并返回每个区间的长度。


2️⃣ 关键观察

如果某个字母在字符串中最右一次出现的位置pos
那么只要当前区间里包含了这个字母,这个区间最少要延伸到pos

➡️区间的右边界由区间内所有字符的“最后出现位置”的最大值决定


3️⃣ 预处理(核心准备)

先遍历一次字符串,记录:

  • 每个字母最后一次出现的下标

这样后续在遍历时,可以随时知道:

“当前字符最远会把区间拉到哪里”。


4️⃣ 贪心划分区间(核心思想)

从左到右遍历字符串:

  • 维护一个变量right
    表示当前区间必须到达的最右边界

  • 每遇到一个字符:

    • 更新right为当前right和该字符最后出现位置的最大值

  • 当遍历位置i == right时:

    • 说明当前区间内的所有字符都不会再出现在后面

    • 可以安全地切分一个区间

    • 记录区间长度

    • 从下一个位置开始新一段

这是一个一次扫描 + 局部最优即全局最优的贪心过程。

class Solution { public: vector<int> partitionLabels(string s) { int last[26]; vector<int> length; for (int i = 0; i < s.size(); i++) last[s[i] - 'a'] = i; int right = -1; int start = 0; for (int i = 0; i < s.size(); i++) { right = max(right, last[s[i] - 'a']); if (i == right) { length.push_back(i - start + 1); start = i + 1; } } return length; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 23:31:05

Oracle获取SQL执行计划

Oracle查看SQL执行计划以及执行开销 EXPLAIN PLAN是Oracle提供的一种静态分析SQL执行路径的方法&#xff0c;它通过生成逻辑执行计划帮助开发者和DBA预测SQL的性能表现。 注意&#xff1a;EXPLAIN PLAN不会实际执行SQL&#xff0c;而是将优化器生成的执行计划写入PLAN_TABLE&am…

作者头像 李华
网站建设 2026/5/11 16:23:56

Kettle-Manager:颠覆传统的数据集成管理新体验 [特殊字符]

Kettle-Manager&#xff1a;颠覆传统的数据集成管理新体验 &#x1f680; 【免费下载链接】kettle-manager 专门为kettle这款优秀的ETL工具开发的web端管理工具。 项目地址: https://gitcode.com/gh_mirrors/ke/kettle-manager 在当今数据爆炸的时代&#xff0c;企业面临…

作者头像 李华
网站建设 2026/5/4 5:10:26

Calendar容器定制与布局控制完全指南:从基础配置到高级实战

Calendar容器定制与布局控制完全指南&#xff1a;从基础配置到高级实战 【免费下载链接】caesium-image-compressor Caesium is an image compression software that helps you store, send and share digital pictures, supporting JPG, PNG and WebP formats. You can quickl…

作者头像 李华
网站建设 2026/5/9 9:32:15

5分钟搞定!用Docker轻松部署1100+语言电子书转有声书神器

还在为电子书转有声书的复杂配置头疼吗&#xff1f;今天我要分享一个超级简单的解决方案——使用Docker快速部署ebook2audiobook项目&#xff0c;让你在5分钟内拥有支持1100多种语言的AI语音合成环境&#xff01;无论你是Windows、macOS还是Linux用户&#xff0c;都能轻松上手。…

作者头像 李华
网站建设 2026/5/1 13:58:59

完整指南:5步构建行为面试中的领导力故事

完整指南&#xff1a;5步构建行为面试中的领导力故事 【免费下载链接】awesome-behavioral-interviews Tips and resources to prepare for Behavioral interviews. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-behavioral-interviews 想要在行为面试中脱颖而…

作者头像 李华
网站建设 2026/5/3 14:47:20

选择性状态空间机制:5个关键突破让序列建模效率提升10倍

选择性状态空间机制&#xff1a;5个关键突破让序列建模效率提升10倍 【免费下载链接】mamba 项目地址: https://gitcode.com/GitHub_Trending/ma/mamba 还在为长文本生成时GPU内存告急而焦虑&#xff1f;或者因Transformer在超长序列推理中的O(n)复杂度而束手无策&…

作者头像 李华