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

763.划分字母区间

题目描述

题解(贪心算法)

思路

代码

classSolution{publicList<Integer>partitionLabels(Strings){// 用于记录每个小写字母最后一次出现的索引位置int[]last=newint[26];intlength=s.length();// 第一次遍历:记录每个字母最后出现的下标for(inti=0;i<length;i++){last[s.charAt(i)-'a']=i;}List<Integer>partition=newArrayList<>();intstart=0;// 当前片段的起始位置intend=0;// 当前片段的结束位置// 第二次遍历:利用贪心思想划分区间for(inti=0;i<length;i++){// 更新当前片段必须包含的最远位置end=Math.max(end,last[s.charAt(i)-'a']);// 如果当前索引走到了当前片段的最远位置,说明可以安全地切分了if(i==end){partition.add(end-start+1);// 更新下一个片段的起始位置start=end+1;}}returnpartition;}}

复杂度分析

  • 时间复杂度:O(N)O(N)O(N),其中NNN是字符串的长度。我们需要遍历两次字符串,第一次记录最后出现位置,第二次进行区间划分。对常数大小的字母表(26个)的访问时间是O(1)O(1)O(1),整体是线性时间复杂度
  • 空间复杂度:O(∣Σ∣)O(|\Sigma|)O(∣Σ∣),其中Σ\SigmaΣ是字符集。题目中说明字符串只包含小写英文字母,因此我们需要一个大小为 26 的数组来记录字母的最后出现位置,空间复杂度为O(1)O(1)O(1)(即O(26)O(26)O(26)常数级别)。返回值不计入空间复杂度
http://www.jsqmd.com/news/647994/

相关文章:

  • 江城智造,共赴盛会!AICA数智创新公开课·武汉专场圆满举办
  • HakcMyVM-Quick4
  • 从CALCE到BMS开发:如何利用公开电池数据集训练你的第一个SOC预测模型
  • 在Ubuntu 22.04上配置Frappe-Bench:从环境准备到成功启动
  • 盘点:四种基于SAM的域适应与弱监督分割技术演进
  • AI产品经理崛起!转型AI,你需要掌握的核心能力与职业规划全解析!
  • Genshin FPS Unlocker:三步解锁《原神》60帧限制,畅享高刷游戏体验
  • 横河 GX90XA-10-U2N-CC无纸记录仪采集模块 适用于GP10,GP20
  • 影视站模板进行‌泛目录(泛站/泛页面)二次开发‌,以实现SEO优化、站群搭建、自动采集、内容伪原创等功能。根据2026年4月的最新公开资料
  • 2026年吊挂灯箱实力厂商亲测复盘:亮欣广告灯箱为何成为行业优选解决方案
  • 丝杆升降机多久润滑一次最合适?
  • AI OPC 每日资讯(4月15日)|《全球人工智能治理科技社团倡议》发布
  • ELK日志分析系统实战:从零搭建到可视化监控(含Filebeat配置)
  • 电子爱好者必看:5分钟掌握三极管工作状态的实战判断技巧
  • 大量TIME_WAIT状态的连接问题
  • 告别Appium Desktop:新版Appium Inspector一站式环境配置与实战指南
  • BepInEx 终极入门指南:5步轻松搞定Unity游戏插件框架
  • 2026年知名的一二次插件高低压柜配件/配电改造高低压柜配件用户口碑推荐厂家 - 品牌宣传支持者
  • 用PyTorch复现SRCNN:三行代码搞定图像超分,重温2015年的经典
  • 【实战分享】Ubuntu根目录空间告急?巧妙挂载新分区到/opt释放压力
  • 机器人控制:大学科研的前沿探索与未来图景
  • 【Linux命令饲养指南】Ubuntu 安装 MySQL【AI辅助实现】
  • 零基础必看!嘉立创EDA网页版避坑指南:3天搞定CH340下载器PCB设计
  • 手把手教你用SS928开发4K超微光网络摄像机(附夜间降噪效果实测)
  • 用一台电脑玩转eNSP双机SSH互访:模拟真实网络运维的完整实验
  • 从日志分析到数据流处理:用 Linux tail 命令玩转实时数据的小技巧
  • Win10下Windows_Terminal的安装
  • 11. TCN BPDU:揭秘 STP 拓扑变更的通知与收敛机制
  • USB4与PCIe的协同进化:多协议接口的未来架构设计
  • 主流手机云测试平台横向评测:如何为你的APP选择最佳测试方案?