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

力扣HOT100之贪心算法:763. 划分字母区间


这道题之前刷代码随想录的时候做过,现在回过头来做,又不记得了😅。回去看了下代码随想录的视频才写出来,感觉这道题和之前的45.跳跃游戏Ⅱ的思路很像。
我们首先用一个哈希表来统计每个字母出现的最大下标,这里我们定义一个长度为26vector<int> hash,然后我们遍历字符串,执行hash[s[i] - 'a'] = i,即可不断更新最大下标。
在更新完字符串s中的所有字符出现的最大下标后,我们再用一个for循环来遍历字符串,我们定义resultcurrentnextresult用来存放每段字符串的长度,current代表一段字符串的起始下标,初始化为0next代表一段字符串的终止下标,也初始化为0。当我们遍历字符串s的时候,不断更新这段字符串的最大覆盖范围,即next = max(next, hash[s[i] - 'a']);,当i == next时,说明我们已经遍历到了此段字符串的末尾,我们需要收获结果,直接将next - current + 1添加到result中,然后我们再更新下一段字符串的起点current = next + 1;,然后进行下一段字符串的统计,当遍历完整个字符串s时,返回最终的结果。

class Solution {
public:vector<int> partitionLabels(string s) {vector<int> hash(26, 0);  //统计每一种字符出现的最远下标vector<int> result;for(int i = 0; i < s.size(); i++)hash[s[i] - 'a'] = i;int next = 0;   //记录划分区间的最右端int current = 0;  //记录划分区间的最左端for(int i = 0; i < s.size(); i++){next = max(next, hash[s[i] - 'a']);   //不断更新区间的右端点if(i == next){  //到达一个区间的最右端,需要收获结果result.push_back(next - current + 1);current = next + 1;                }}return result;}
};
http://www.xdnf.cn/news/13721.html

相关文章:

  • Nacos服务注册与发现原理
  • 关于安卓dialogFragment中,EditText无法删除文字的问题
  • 103. Java 继承 - 状态、实现和类型的多重继承
  • 全球/中国降水量数据集(1940-2024年)
  • 图像解码失败检测
  • 健康管理实训室建设方案:构建智慧康养人才培养生态体系
  • PERST#、Hot Reset、Link Disable
  • React16,17,18,19更新对比
  • slam--高斯分布
  • 《树状数组》
  • 消除信息屏障推动系统联动,IBMS系统成为建筑智能控制核心枢纽
  • EtherCAT转Modbus TCP网关实现倍福CX9020与科尔摩根NDC8AGV控制器设备之间的通讯案例
  • C语言入门教程
  • 2.4 创建视图
  • python爬虫ip封禁应对办法
  • Word 文件转md文件 在 Word 中没有直接将文档另存为 Markdown(.md)格式的选项,但你可以使用一些工具或手动转换来实现
  • spring系列---拦截器
  • NLP基础与词嵌入:让AI理解文字(superior哥深度学习系列第13期)
  • 计算机组成原理-主存储器
  • RedHat主机配置日志留存策略:从4周延长至6个月
  • 预训练模型适应下游任务?模型参数Freezing 与 微调 !
  • 基于Jenkins与Kubernetes的系统化变更管理实践
  • 《前端面试题:call、apply、bind 区别》
  • 1.sql连接语句
  • 软件测试相关问题
  • 柑橘检测模型
  • 直白话 OAuth 2 流程
  • langchain runnables 概念指南
  • 2025年硬件实习/秋招面试准备
  • 小熊派开发板显示图片