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

力扣 划分字母区间

题目:

给你一个字符串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; } };
http://www.jsqmd.com/news/87901/

相关文章:

  • 腾讯混元4B开源:小参数大模型如何重塑AI部署格局
  • 深入解析:【指南】为你的开源Python项目编写完善的文档(Sphinx)
  • 学习试用codebuddy和Trae编程“俄罗斯方块”测试体验
  • Integrated RNNs for Rainfall Sensing with Wireless Communication Networks(利用无线通信网络的集成RNNs进行降雨感知)
  • 基于vue的酒店客房预订管理系统_7t24n9n5_springboot php python nodejs
  • 基于vue的酒店客房预订管理系统_7t24n9n5_springboot php python nodejs
  • 基于vue的食品溯源管理系统_91804cyk_springboot php python nodejs
  • macOS Android USB网络共享终极指南:HoRNDIS完整教程
  • SpringBoot3+Vue3全栈开发终极指南:10分钟搭建企业级应用架构
  • 基于vue的心理医生综合诊疗系统的设计与实现_002cz1k7_springboot php python nodejs
  • 题目集4~5及课堂测验总结性Blog
  • 终极USB启动盘制作指南:Rufus完整使用教程
  • 学习周报二十六
  • MLflow全球化部署终极指南:从单机房到跨国团队的完整演进方案
  • 网络安全 | 深入理解SQL注入的原理和防范 - 指南
  • CogVLM2横空出世:190亿参数开源模型如何引领多模态AI普惠革命
  • Blender与OpenUSD集成实战:打通3D工作流的终极指南
  • 选择性状态空间机制:5个关键突破让序列建模效率提升10倍
  • 关于平抛运动的推导
  • React Native桌面应用交互终极指南:从点击事件到原生菜单完整教程
  • 数字电路模拟程序大作业总结
  • Flink面试入门:常见问题及简单解答
  • 开源媒体客户端革新:如何用Jellyfin重塑你的家庭影院体验
  • MobaXterm高效运维实战指南
  • ISCN 2020 染色体命名国际标准:解锁精准遗传分析的密钥
  • 终极指南:如何快速上手SpaceCadetPinball经典弹球游戏
  • 7个必知技巧:腾讯混元3D-Part文件格式完全攻略
  • LazyVim:告别配置烦恼的Neovim解决方案
  • 2025年最新排行:不锈钢热轧板领域五大专业源头厂家,不锈钢热轧板/耐腐蚀热轧板实力厂家找哪家 - 品牌推荐师
  • AndroidTool-Mac性能监控工具:多设备管理终极优化指南