划分字母区间 - LeetCode 热题 80

大家好!我是曾续缘🤖

今天是《LeetCode 热题 100》系列

发车第 80 天

贪心算法第 4 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

划分字母区间

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

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

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

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

示例 2:

输入:s = "eccbbbbdec"
输出:[10]

提示:

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

解题方法

划分字母区间这个问题,要求我们将一个字符串尽可能多地划分为由相同字母组成的片段,同时保证连接起来的字符串仍然是原来的字符串。

  1. 记录每个字母的最后一个位置
    • 我们可以使用一个数组 last 来记录每个字母最后一次出现的索引位置。
    • 遍历字符串 s 一次,对于每个字符,更新它对应的 last 数组值。
  2. 遍历字符串进行分割
    • 使用一个指针 start 来标记当前片段的开始位置。
    • 使用一个变量 end 来标记当前片段的结束位置。
    • 遍历字符串 s,对于每个字符,更新 end 为当前字符的 last 值和 end 中的较大值。
    • i == end 时,说明当前片段结束,我们将 end - start + 1 作为片段长度,并将其添加到答案列表中。
    • 更新 startend + 1,以开始搜索下一个片段。
  3. 返回答案
    • 遍历完成后,返回答案列表,其中包含了每个片段的长度。

Code

class Solution {public List<Integer> partitionLabels(String s) {// 创建一个数组,用于存储每个字母最后一次出现的位置int[] last = new int[26];int length = s.length(); // 获取字符串的长度// 遍历字符串,记录每个字母最后一次出现的位置for (int i = 0; i < length; i++) {last[s.charAt(i) - 'a'] = i;}List<Integer> ans = new ArrayList<Integer>(); // 创建一个列表用于存储片段的长度int start = 0, end = 0; // 初始化开始和结束位置for (int i = 0; i < length; i++) {// 更新结束位置为当前字符的最后一个出现位置和end的较大值end = Math.max(end, last[s.charAt(i) - 'a']);// 如果当前索引i等于结束位置end,说明找到了一个片段的结束if (i == end) {// 将当前片段的长度添加到答案列表中ans.add(end - start + 1);// 更新开始位置为结束位置后一位,继续寻找下一个片段start = end + 1;}}return ans; // 返回答案列表}
}

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

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

相关文章

solr-8.11.3

https://solr.apache.org/downloads.html https://archive.apache.org/dist/solr/solr/ F:\Document_Solr.apache.org\solr-8.11.3\bin Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。 C:\Users\Administrator>F: F:\> F:\>…

(持续更新)ai 工程师(nlp)面试问题+答案

python基础 浅拷贝和深拷贝浅拷贝:copy() 浅拷贝意味着创建一个新的对象,但是这个对象包含的元素仍然是原始对象中元素的引用。也就是说,如果原始对象中的元素是可变的(比如列表、字典等),那么在拷贝对象中修改这些元素会影响到原始对象。 深拷贝:deepcopy() 深拷贝会创…

2023年03月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;共50分&#xff09; 第1题 有如下程序段&#xff1a; with open(mistakes.txt, w) as f:words [believe,memorize]f.write(\n.join(words))执行该代码后&#xff0c;…

springboot基础及上传组件封装

简介 本文主要以文件上传为demo&#xff0c;介绍了一些 springboot web 开发的入门的技术栈。 对应刚接触 springboot 的可以参考下。 主要包括文件md5比对、生成图片缩略图、数据库迁移、文件记录持久化、请求全局异常处理等功能。 准备工作 在 idea 中创建项目&#xff…

Ceph集群存储案例

Ceph是一种可靠的、可扩展的、统一的、分布式的存储系统。Ceph高度可靠、易于管理且免费。Ceph提供了非凡的可扩展性——数以千计的客户端访问PB到EB的数据。Ceph存储集群相互通信以动态复制和重新分配数据。目前众多云厂商都在使用Ceph&#xff0c;应用广泛。如&#xff1a;华…

【C++ ——— 哈希】位图 | 布隆过滤器

文章目录 1、位图1.1位图概念 2.位图实现位图的应用1.一百亿个整数&#xff0c;设计算法找到只出现一次的整数?2.给两个文件&#xff0c;分别有一百亿个整数&#xff0c;我们只有1G内存该如何找到两个文件的交集&#xff1f;3.位图应用变形&#xff1a;一个文件有100亿个int&a…

【介绍下运维,什么是运维?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Linux 编译安装python

以deepin操作系统安装Python3.8.10为例。 下载 python3.8.10 官网下载 Linux要下载源码&#xff0c;进行编译。 下图tarball即tar包&#xff0c;是压缩包的意思。python官网给出两种压缩格式的tarball&#xff0c;下载哪个都可以。 方式一&#xff1a;直接点击链接下载 方式…

python-模块-网络编程-多任务

一、模块 1-1 Python 自带模块 Json模块 处理json数据 {"key":"value"} json不是字典 本质是一个有引号的字符串数据 json注意点 {} 中的数据是字符串引号必须是双引号 使用json模块可以实现将json转为字典&#xff0c;使用字典的方法操作数据 。 或者将…

Debian和ubuntu 嵌入式的系统的 区别

随着开源操作系统的日益流行&#xff0c;Debian和Ubuntu这两个基于Linux的发行版本成为了众多开发者和系统管理员的首选。它们各自拥有独特的优势和特点&#xff0c;那么&#xff0c;在选择时&#xff0c;哪一个更适合你呢&#xff1f;接下来&#xff0c;我们将深入探讨两者的关…

C++候捷stl-视频笔记2

深度搜索list list是双向链表&#xff1a;底部实现是环状双向链表 list内部除了存data之外&#xff0c;还要存一个前向指针prev和一个后向指针next list的iterator&#xff0c;当迭代器的时候&#xff0c;是从一个节点走到下一个节点&#xff0c;是通过访问next指针实现的 主要…

NFS p.1 服务器的部署以及客户端与服务端的远程挂载

目录 介绍 应用 NFS的工作原理 NFS的使用 步骤 1、两台机子 2、安装 3、配置文件 4、实验 服务端 准备 启动服务&#xff1a; 客户端 准备 步骤 介绍 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是一种古老的用于在UNIX/Linux主…

新宏观范式和产业趋势下,纷享销客如何助力企业出海?

出海&#xff0c;已不再是企业的“备胎”&#xff0c;而是必须面对的“大考”&#xff01;在这个全球化的大潮中&#xff0c;有的企业乘风破浪&#xff0c;勇攀高峰&#xff0c;也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海&#xff0c;要么出局”的抉择&#xff…

多线程基础知识-

线程同步需要注意什么 &#xff0c;线程同步是一种机制&#xff0c;用于确保多个线程在访问共享资源时的安全性。在进行线程同步时&#xff0c;需要注意以下几点&#xff1a; 互斥性&#xff1a;确保同一时间只有一个线程可以访问共享资源。可以使用synchronized关键字来实现互…

C++设计模式-策略模式

文章目录 27. 策略模式 运行在VS2022&#xff0c;x86&#xff0c;Debug下。 27. 策略模式 策略模式让算法的选择与使用独立开来&#xff0c;使得代码更灵活、可扩展和易维护。应用&#xff1a;如在游戏开发中&#xff0c;AI角色需要根据环境和条件做出不同的行为&#xff0c;如…

x264 参考帧管理原理:i_frame_num 变量

x264 参考帧管理 x264 是一个开源的 H.264 视频编码软件,它提供了许多高级特性,包括对参考帧的高效管理。参考帧管理是视频编码中的一个重要部分,它涉及到如何存储、更新和使用已经编码的帧以提高编码效率。 x264 参考帧管理的一些关键点总结如下: 参考帧的初始化和重排序:…

微型导轨在自动化制造中有哪些优势?

微型导轨在自动化制造中发挥重要作用&#xff0c;能够满足自动化设备制造中对精度要求较高的工艺环节。适用于自动装配线、自动检测设备和机器人操作等环节&#xff0c;推动了行业的进步与发展。那么&#xff0c;微型导轨在使用中有哪些优势呢&#xff1f; 1、精度高和稳定性强…

Vue之组件基础(插槽)

在HTML中&#xff0c;开发者可以在双标签内添加一些信息。而在Vue中&#xff0c;组件以标签的形式引用&#xff0c;那么如何在组件的标签内添加一些信息并将信息渲染到页面中呢?其实&#xff0c;Vue 提供了插槽&#xff0c;专门用来实现这样的效果。 一.什么是插槽 Vue为组件…

云安全服务有什么威胁?

在云安全服务中&#xff0c;会面临着各种安全威胁&#xff0c;这些安全威胁会给企业造成严重的影响&#xff0c;接下来就让小编来给大家介绍一下云安全服务中的安全威胁有哪些吧&#xff01; 一、虚拟化安全威胁 云计算中的核心技术有虚拟化技术&#xff0c;但是虚拟化环境中也…

【会议征稿】2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024)

2024年无人驾驶与智能传感技术国际学术会议&#xff08;ADIST 2024&#xff09;将于2024年6月28-30日在珠海召开。ADIST 2024旨在搭建学术资源共享平台&#xff0c;加强中外学术合作&#xff0c;促进自动驾驶和智能传感技术的发展&#xff0c;促进全球研究人员、开发人员、工程…