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

LeetCode 算法:划分字母区间 c++

  • 原题链接🔗:划分字母区间
  • 难度:中等⭐️⭐️

题目

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

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

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

示例 1:
输入:s = “ababcbacadefegdehijhklij”
输出:[9,7,8]
解释:
划分结果为 “ababcbaca”、“defegde”、“hijhklij” 。
每个字母最多出现在一个片段中。
像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。

示例 2:

输入:s = “eccbbbbdec”
输出:[10]

提示:

  • 1 <= s.length <= 500
  • s 仅由小写英文字母组成

贪心算法

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法策略。它在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。

贪心算法不保证会得到最优解,但在某些问题上贪心算法的解是足够好的。以下是贪心算法的一些关键特性:

  1. 贪心选择性质:算法在每一步都选择当前看起来最优的选项,而不考虑未来的选择。
  2. 最优子结构:问题可以分解为子问题,子问题的最优解能组成原问题的最优解。
  3. 可行性:贪心选择必须在当前状态下可行。

贪心算法通常用于求解以下类型的问题:

  • 资源分配问题
  • 调度问题
  • 网络流问题
  • 集合覆盖问题
  • 最小生成树问题(如 Prim 算法和 Kruskal 算法)

贪心算法的实现步骤通常包括:

  1. 定义问题的一个解决方案。
  2. 遍历所有候选解。
  3. 选择当前状态下的最优候选解,并将其添加到当前解决方案中。
  4. 重复步骤2和3,直到达到问题的结束条件。

贪心算法的优点是简单、直观,且在某些情况下效率很高。然而,缺点是它不总是能得到全局最优解,特别是当问题不具有最优子结构时。

题解

  1. 解题思路:

这个问题是一个典型的贪心算法问题,我们可以通过以下步骤来解决:

  • 初始化:创建一个空列表 result 用来存储每个片段的长度。

  • 遍历字符串:从左到右遍历字符串 s。

  • 记录当前字母:使用一个变量 current_char 记录当前遍历到的字母。

  • 计数:使用一个变量 count 来记录当前字母连续出现的次数。

  • 更新片段长度:每当遇到一个新的字母,或者到达字符串的末尾时,将 count 加入到 result 列表中,并重置 count 和 current_char。

  • 特殊情况处理:如果当前字母和下一个字母相同,则 count 自增,继续遍历;如果不同,将当前 count 存入 result 并更新 current_char 和 count。

  • 返回结果:遍历结束后,返回 result 列表。

  1. c++ demo:
#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;class Solution {
public:vector<int> partitionLabels(string s) {vector<int> result;unordered_map<char, int> last_position;int start = 0, end = -1, length = 0;// 记录每个字符最后一次出现的位置for (int i = 0; i < s.length(); ++i) {last_position[s[i]] = i;}for (int i = 0; i < s.length(); ++i) {// 更新当前片段的结束位置end = max(end, last_position[s[i]]);length++;// 如果当前位置是当前片段的结束位置,则添加到结果中if (i == end) {result.push_back(length);start = i + 1; // 重置片段开始位置end = -1; // 重置片段结束位置length = 0; // 重置片段长度}}return result;}
};int main() {Solution solution;string s = "ababcbacadefegdehijhklij";vector<int> result = solution.partitionLabels(s);for (int length : result) {cout << length << " ";}cout << endl;return 0;
}
  • 输出结果:

9 7 8

  1. 代码仓库地址:partitionLabels

相关文章:

LeetCode 算法:划分字母区间 c++

原题链接&#x1f517;&#xff1a;划分字母区间难度&#xff1a;中等⭐️⭐️ 题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#…...

PMP备考指南:策略、时间安排与心得分享

准备和时间安排&#xff0c;我是工作的时间把它顺便考了&#xff0c;大约花了一个月左右时间备考&#xff0c;前面的时间都在筹办婚礼&#xff0c;根本没时间&#xff0c;最后一个月都差点想放弃了&#xff0c;但想想还是冲一把就没有选择延考。 干货见下&#xff1a; ▌&…...

CentOS上通过frp实现HTTPS访问内网

要在CentOS上通过frp实现HTTPS访问内网&#xff0c;你需要按照以下步骤操作&#xff1a; 在外网服务器上安装frps&#xff08;frp服务端&#xff09;。 在外网服务器上配置frps&#xff0c;编辑配置文件frps.ini。 在frps服务器上启动frps服务。 在内网服务器上安装frpc&…...

短视频SDK解决方案,高效集成,助力商业变现

美摄科技&#xff0c;作为业界领先的多媒体技术服务商&#xff0c;其全面升级的短视频SDK解决方案&#xff0c;旨在为开发者与内容创作者提供一站式、高效能的创作工具&#xff0c;让每一个灵感都能瞬间转化为触动人心的视频作品。 【一站式解决方案&#xff0c;重塑短视频创作…...

C++系列-继承方式

继承方式 继承的语法继承方式&#xff1a;继承方式的特点继承方式的举例 继承可以减少重复的代码。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。基类父类&#xff0c;派生类子类&#xff0c;派生类是在继承了基类的部分成员基础…...

web前端之选项卡的实现、动态添加类名、动态移除类名、动态添加样式、激活、间距、tabBar

MENU 原生(一)原生(二)vue(一) 原生(一) 效果图 html 代码 <div class"card"><div class"tab_bar"><div class"item" onclick"handleTabBar(this)">tabBar1</div><div class"item" onclick&qu…...

sql 优化,提高查询速度

文章目录 一、前言二、建议2.1 使用索引2.2 避免使用select *2.3. 使用表连接代替子查询2.4. 优化WHERE子句&#xff0c;减少返回结果集的大小2.5 用union all代替union2.6 使用合适的聚合策略2.7 避免在WHERE子句中使用函数2.8 使用EXPLAIN分析查询2.9 小表驱动大表2.10 使用窗…...

springboot后端开发-自定义参数校验器

背景 在使用springboot进行后端开发的时候&#xff0c;经常会遇到数据校验的问题&#xff0c; 有时候可能默认的校验器不足以满足自己的需求&#xff0c; 这个时候就需要开发一个自己的校验器 在 Spring Boot 中自定义参数校验器通常涉及以下几个步骤&#xff1a; 1. 定义注解…...

springboot社区帮扶对象管理系统论文源码调试讲解

第2章 开发环境与技术 社区帮扶对象管理系统的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对社区帮扶对象管理系统用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…...

EmguCV学习笔记 VB.Net 6.2 轮廓处理

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象&#xff0c;分别是我方坦克和敌方坦克。用户可…...

【机器学习】经典CNN架构

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 经典CNN架构1. 引言2. LeNet3. AlexNet4. VGGNet5. GoogLeNet(Inception)6. Res…...

图像数据处理21

五、边缘检测 5.2基于二阶导数的边缘检测 一阶导数&#xff08;如Sobel、Prewitt算子&#xff09;能够捕捉到灰度值的快速变化&#xff0c;但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置&#xff0c;可以利用二阶导数的零交叉点。零交叉点是是函…...

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…...

设备运维故障排查与修复技巧

运维中最常见的40个故障问题及其解决方法: 1. 网络不通问题:无法访问网络资源。 解决方法:检查物理线路、交换机端口、网卡驱动和配置,使用ping、traceroute等工具定位问题。 2. 网络速度慢问题:访问网络资源速度慢。 解决方法:分析带宽使用情况,检查是否存在广播风…...

探索Python的自动化魔法:AutoIt库揭秘

文章目录 探索Python的自动化魔法&#xff1a;AutoIt库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;AutoIt是什么&#xff1f;第三部分&#xff1a;如何安装AutoIt库&#xff1f;第四部分&#xff1a;AutoIt的五个简单函数第五部分&#xff1a;场景应用第六部分&…...

【I/O多路复用】

基于I/O多路复用的并发编程 I/O实现I/O多路复用select优缺点 pollepoll优点 I/O I/O复用是基于一个单进程或单线程的一个执行流当中监控多个输入输出流的技术&#xff08;网络套接字或者文件描述符进行监控&#xff09;。单进程或单线程&#xff0c;允许多个用户对单进程发起连…...

【python报错已解决】“IndexError: list index out of range”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 你是否在处理Python列表时遇到了“IndexError: list index out of range”的错误&#xff1f;这个错误可能会让你的程序中…...

oracle和mysql查询某字段在哪个表中

oracle和mysql查询某字段在哪个表中 oracle的 select TABLE_NAME from user_tab_columns where COLUMN_NAME字段名mysql的&#xff1a; select table_schema ,table_name from information_schema.columns where column_name ‘字段名’ 查询结果table_schema为数据库名&a…...

TCP vs UDP:揭秘可靠性与效率之争

概述 今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候&#xff0c;我们提到过一个重要观点。在网络层及以下几层&#xff0c;更多的是让主机与主机建立连接&#xff0c;也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而&#xff0c;在网络中的通信…...

SSM框架在零售业数字化转型中的实践:超市管理系统全流程解析

1. 为什么零售业需要数字化转型&#xff1f; 最近几年我走访了不少中小型超市&#xff0c;发现一个共同痛点&#xff1a;很多老板还在用纸质小本本记录进货和销售数据&#xff0c;月底对账时经常出现"货卖完了但钱对不上"的情况。有个开社区超市的张老板跟我吐槽&am…...

bootstrap怎么设置表单为水平布局

Bootstrap 5 中需用 row align-items-center col-auto col-form-label 和 col 包裹 input 实现水平对齐&#xff1b;form-group 和 col-sm-2 等 v4 类已失效&#xff1b;复选框须用 form-check 结构&#xff1b;form-floating 不适用于水平布局。Bootstrap 5 中怎么让 label …...

【实盘】20260409 :+3.42% 对资管而言,曲线就是生命线!

一、20260409 - 平仓净值曲线 01 CTA投资组合团队自营CTA&#xff08;Commodity Trading Advisor&#xff09;多品种全天候自动化策略&#xff0c;是一类基于截面双动量因子的量化模型、覆盖全交易时段、跨多品种期货合约的自动化交易策略&#xff0c;核心目标是通过捕捉不同品…...

RMBG-1.4移动端集成:Android平台实时抠图应用开发

RMBG-1.4移动端集成&#xff1a;Android平台实时抠图应用开发 1. 引言 你有没有遇到过这样的场景&#xff1a;拍了一张不错的照片&#xff0c;但背景太杂乱想换掉&#xff0c;或者需要快速制作商品白底图&#xff1f;传统抠图工具要么效果不好&#xff0c;要么需要复杂的操作…...

PyTorch 2.8通用镜像效果展示:Llama3+Phi-3-Vision图文理解→视频描述生成

PyTorch 2.8通用镜像效果展示&#xff1a;Llama3Phi-3-Vision图文理解→视频描述生成 1. 开箱即用的深度学习环境 PyTorch 2.8通用深度学习镜像为开发者提供了一个即开即用的强大环境。基于RTX 4090D 24GB显卡和CUDA 12.4深度优化&#xff0c;这个镜像让复杂的AI开发变得简单…...

等高线转面(断边界处理+将线的高程属性赋予面)

1 引言想把获得的等高线转化为面&#xff0c;便于统计不同高程下的其他面shp数据&#xff0c;操作中发现两个问题&#xff1a;&#xff08;1&#xff09;等高线若不闭合&#xff0c;则无法生成面&#xff1b;&#xff08;2&#xff09;闭合的等高线生成面后&#xff0c;没有等高…...

【2026 】大模型选型与 API 接入全指南:主流模型技术解析与实战对比

文章目录2026 大模型选型与 API 接入全指南&#xff1a;主流模型技术解析与实战对比一、引言二、2026 主流大模型全景2.1 闭源旗舰模型2.2 开源 / 可私有化模型三、能力维度横评四、API 接入方式全景4.1 主要接入渠道对比4.2 统一接口标准五、定价结构与成本估算5.1 Token 成本…...

AI原生研发必须跨过的5道合规关卡:从模型训练数据溯源到部署阶段审计日志全链路合规验证指南

第一章&#xff1a;AI原生软件研发合规性要求解读 2026奇点智能技术大会(https://ml-summit.org) AI原生软件并非传统软件的简单增强&#xff0c;其核心特征在于模型即逻辑、数据即资产、推理即服务。这种范式转变直接触发了监管视角的根本性迁移——合规性不再仅聚焦于代码安…...

VS2015环境下FreeImage库的安装与配置全攻略(含常见问题解决)

VS2015环境下FreeImage库的完整配置指南与实战技巧 在Windows平台进行图像处理开发时&#xff0c;选择合适的图像处理库往往能事半功倍。FreeImage作为一款轻量级但功能强大的开源库&#xff0c;支持超过20种常见图像格式&#xff0c;从BMP、JPEG到专业的TIFF格式都能轻松应对。…...

java+vue+SpringBoot环保网站(程序+数据库+报告+部署教程+答辩指导)

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿ppt部署教程代码讲解代码时间修改工具 技术实现 开发语言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot数据库&#xff1a;mysql 开发工具 JDK版本&#xff1a;JDK1.8 数…...