news 2026/8/28 12:54:44

力扣 划分字母区间

作者头像

张小明

前端开发工程师

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/8/28 15:55:16

学习试用codebuddy和Trae编程“俄罗斯方块”测试体验

一、先试用 codeBuddy 代码助手提交游戏制作说明&#xff0c;然后生成基本功能的俄罗斯方块&#xff0c;基本可用&#xff0c;有一些问题&#xff0c;告诉codeBuddy继续优化&#xff0c;基本能用。体验用了几天之后&#xff0c;今天突然提示试用资源用完了。一句话也不给输出了…

作者头像 李华
网站建设 2026/8/28 23:20:03

5分钟搞定RAG实验:LightRAG让学术研究变得如此简单!

5分钟搞定RAG实验&#xff1a;LightRAG让学术研究变得如此简单&#xff01; 【免费下载链接】LightRAG "LightRAG: Simple and Fast Retrieval-Augmented Generation" 项目地址: https://gitcode.com/GitHub_Trending/li/LightRAG 还在为复杂的RAG实验配置而头…

作者头像 李华
网站建设 2026/8/28 10:25:53

关于平抛运动的推导

平抛运动是指物体以一定的初速度沿水平方向抛出&#xff0c;仅受重力作用下的运动。它是一种常见的二维运动形式&#xff0c;结合了水平方向的匀速直线运动和竖直方向的自由落体运动。现在对平抛运动进行推导。分别在 xxx 方向和 yyy 方向上考虑 xxx 方向&#xff1a;由于不考虑…

作者头像 李华
网站建设 2026/8/27 9:04:39

从零开始构建类型安全的Feather图标库

从零开始构建类型安全的Feather图标库 【免费下载链接】feather 项目地址: https://gitcode.com/gh_mirrors/fea/feather 在现代前端开发中&#xff0c;图标作为用户界面的重要组成部分&#xff0c;其质量和易用性直接影响开发效率和用户体验。Feather图标库以其简洁优…

作者头像 李华
网站建设 2026/8/28 20:25:42

AWR1843毫米波雷达Python实时数据处理与可视化实战指南

AWR1843-Read-Data-Python-MMWAVE-SDK-3 项目为开发者提供了一套完整的解决方案&#xff0c;能够通过Python语言实时读取AWR1843毫米波雷达数据并进行可视化展示。无论您是从事智能交通、安防监控还是工业自动化领域&#xff0c;这款工具都能帮助您快速构建雷达应用原型。 【免…

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

LazyVim:告别配置烦恼的Neovim解决方案

LazyVim&#xff1a;告别配置烦恼的Neovim解决方案 【免费下载链接】LazyVim Neovim懒人配置。 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim 从配置困境到编程自由 作为一名开发者&#xff0c;你是否曾经在Neovim的配置迷宫中迷失方向&#xff1f;面对琳…

作者头像 李华