LeetCode-热题100:763. 划分字母区间

题目描述

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

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

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

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

示例 2:

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

提示:

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

代码及注释

func partitionLabels(s string) []int {// 创建一个数组来存储每个字符最后出现的位置lastPos := make([]int, 26)// 结果数组,用于存储每个分区的长度res := make([]int, 0)// 遍历字符串,记录每个字符最后出现的位置for i, c := range s {lastPos[c - 'a'] = i}// 初始化分区的开始和结束位置start, end := 0, 0// 再次遍历字符串来确定分区for i, c := range s {// 更新当前分区的结束位置为当前字符的最后出现位置end = max(end, lastPos[c - 'a'])// 如果当前位置i等于当前分区的结束位置,说明找到了一个分区if i == end {// 计算当前分区的长度并添加到结果数组中res = append(res, end - start + 1)// 更新下一个分区的开始位置start = end + 1}}// 返回结果数组return res
}// 返回两个数的最大值
func max(a, b int) int {if a > b {return a}return b
}

代码解释

  1. 记录每个字符的最后出现位置

    for i, c := range s {lastPos[c - 'a'] = i
    }
    

    这里我们遍历字符串s并记录每个字符最后出现的位置。这样,当我们遍历字符串以确定子串边界时,我们可以直接查找每个字符的最后出现位置。

  2. 确定子串的边界

    for i, c := range s {end = max(end, lastPos[c - 'a'])if i == end {res = append(res, end - start + 1)start = end + 1}
    }
    

    在这个循环中,我们遍历字符串s。对于每个字符,我们更新当前子串的结束位置end为当前字符的最后出现位置。当i == end时,意味着我们找到了一个子串,其边界是startend。我们计算这个子串的长度并将其添加到结果数组res中,然后更新startend + 1以寻找下一个子串。

  3. 返回结果数组

    return res
    

    最后,我们返回结果数组res,其中包含了所有子串的长度。

通过这种方法,我们可以有效地找到字符串s中所有满足条件的子串,其中每个字母只出现在一个子串中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 4. 多重背包问题 I

解题思路 相关思路 import java.util.Scanner; public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);int N scanner.nextInt();int V scanner.nextInt();int v[] new int[N1];int w[] new int[N1];int s[] new int[N1];…

揭秘AI幻觉:GPT-4V存在视觉编码漏洞,清华联合NUS提出LLaVA-UHD

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 GPT-4V 的推出引爆了多模态大模型的研究。GPT-4V 在包括多模态问答、推理、交互在内的多个领…

capter1:GPU 硬件与 CUDA 程序开发工具

GPU 硬件与 CUDA 程序开发工具 参考书籍&#xff1a;CUDA 编程 樊哲勇 代码地址&#xff1a;https://github.com/QINZHAOYU/CudaSteps GPU 硬件 在由 CPU 和 GPU 构成的异构计算平台中&#xff0c;通常将起控制作用的 CPU 称为 主机&#xff08;host&#xff09;&#xff0c;…

二. CUDA编程入门-双线性插值计算

目录 前言0. 简述1. 执行一下我们的第十个CUDA程序2. Bilinear interpolation3. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 Note&#xff1a;关于 CUDA 加速双线程插值的内容博主…

Linux下I2C设备驱动:i2c_driver 的注册示例代码

一. 简介 前面学习了 Linux下 I2C驱动框架分为&#xff1a;I2C总线驱动与I2C设备驱动两个部分。我们主要重点学习 I2C设备驱动&#xff0c;前一篇文章学习了I2C设备驱动相关的结构体与设备驱动注册与删除。文章如下&#xff1a; Linux下I2C驱动实验&#xff1a;I2C 设备驱动…

对象存储服务MinIO安装使用

对象存储服务MinIO安装使用 MinIO简介 MinIO基于Apache License v2.0开源协议的对象存储服务&#xff0c;可以做为云存储的解决方案用来保存海量的图片&#xff0c;视频&#xff0c;文档。由于采用Golang实现&#xff0c;服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置…

爬虫逆向非对称加密和对称加密案例

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 案例--aHR0cHM6Ly9jcmVkaXQuaGxqLmdvdi5jbi94eWdzL3l6d2ZzeHF5bWQv 第一步&#xff1a;分析页面、请求…

CTF 之Zhuanxv

拿到题目进行目录遍历发现有一个/list文件 打开/list文件&#xff0c;发现是一个登录界面 尝试过爆破&#xff0c;毫无疑问不可能成功。 刷新页面&#xff0c;抓包&#xff0c;然后放一个包&#xff0c;发现又发了一个请求。 GET /loadimage?fileNameweb_login_bg.jpg HTTP/…

1995-2021年各省分品种能源产量和消费量数据

1995-2021年各省分品种能源产量和消费量数据 1、时间&#xff1a;1995-2021年 2、来源&#xff1a;能源统计年鉴、各省年鉴 3、指标&#xff1a;能源消费总量、煤炭消费量、焦炭消费量、原油消费量、汽油消费量、煤油消费量、柴油消费量、燃料油消费量、天然气消费量、电力消…

不开玩笑,你应该像「搬砖」一样写代码!斯坦福大学研究如是说

由于程序员不可避免要进行很多重复性的工作&#xff0c;并且工作强度很高&#xff0c;导致有一种自嘲的说法出现&#xff1a;程序员们自称自己每天都在搬砖&#xff08;实际上很多职场人都这么自嘲&#xff09;。我相信当我们说工作像「搬砖」的时候&#xff0c;只是在表达一种…

JSX 入门:React 开发者的必备技能指南

JSX 是 React 的一种语法扩展&#xff0c;用于描述 UI 组件的外观。在 React 中&#xff0c;JSX 可以与 JavaScript 一起使用&#xff0c;帮助您在应用程序中创建动态和可重用的组件。以下是 JSX 的语法、使用技巧和注意事项&#xff0c;以及一些示例代码。 JSX 基础语法 JSX…

非关系型数据库——三万字Redis数据库详解

目录 前言 一、Redis概述 1.主要特点 2.Redis优缺点 3.Redis为什么这么快 4.Redis那么快&#xff0c;为什么不用它做主数据库&#xff0c;只用它做缓存 5.线程模型 5.1单线程架构 5.2多线程IO处理&#xff08;Redis 6及以上&#xff09; 5.3线程模型的优化 6.作用 …

回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-GPR鲸鱼算法优化高斯过程回归多变量回归预测 1.Matlab实现…

系统设计取舍问题

在需求设计过程中&#xff0c;常常面临着取舍问题。由于资源和时间的限制&#xff0c;不可能满足所有的需求&#xff0c;因此需要进行取舍。以下是一些常见的需求设计取舍问题和应对方法&#xff1a; 优先级&#xff1a;对于不同的需求&#xff0c;可以根据其重要性和紧急程度来…

蓝桥杯考前复习二

1.快速幂 public static long qmi(long a, long b, long p) {long r 1;while (b ! 0) {if ((b & 1) 1) {r (r * a) % p;}b >> 1;a a * a % p;}return r;} 2.Java日期类 日期问题暂更 3.日期问题模板 考前更新 4.状态机DP 1.松散子序列 - 蓝桥云课 (lanqia…

LOOP AT内表循环事件块 程序实例

REPORT zdemo_0006. *声明一个结构 DATA: BEGIN OF gs_alv, va1 TYPE char2, va2 TYPE char2, va3 TYPE char2, va4 TYPE char2, END OF gs_alv. *声明内表 DATA: gt_alv LIKE TABLE OF gs_alv. *赋值宏 DEFINE append_va. gs_alv-va1…

吹爆!遥感高光谱分类(Python)

目录 一、数据集下载 二、安装包 三、数据处理 四、模型训练 五、模型推理 六、踩坑记录 一、数据集下载 Hyperspectral Remote Sensing Scenes - Grupo de Inteligencia Computacional (GIC) (ehu.eus) Installing SPy — Spectral Python 0.21 documentation 二、安装…

算法打卡day36|动态规划篇04| 01背包理论基础、416. 分割等和子集

目录 01背包理论基础 01背包问题描述 01背包解法 二维数组 一维数组 算法题 Leetcode 416. 分割等和子集 个人思路 解法 动态规划 01背包理论基础 不同的背包种类&#xff0c;虽然有那么多中南背包&#xff0c;但其中01背包和完全背包是重中之重&#xff1b; 01背包问…

Python + Appium 自动化操作微信入门看这一篇就够了

Appium 是一个开源的自动化测试工具&#xff0c;支持 Android、iOS 平台上的原生应用&#xff0c;支持 Java、Python、PHP 等多种语言。 Appium 封装了 Selenium&#xff0c;能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及额外的移动设备相关的控制命令&#xff0c;…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接&#xff1a;https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码&#xff1a;7tfj