Leetcode763. 划分字母区间

Java实现 LeetCode 763 划分字母区间(暴力) 763. 划分字母区间 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入: S = “ababcbacadefegdehijhklij” 输出: [9,7,8] 解释: 划分结果为 “ababcbaca”, “defegde”, “hijhklij”。 每个字母最多出现在一个片段中。 ... 阅读详情

Every day a Leetcode

题目来源:763. 划分字母区间

解法1:贪心

题解:划分字母区间

由于同一个字母只能出现在同一个片段,显然同一个字母的第一次出现的下标位置和最后一次出现的下标位置必须出现在同一个片段。因此需要遍历字符串,得到每个字母最后一次出现的下标位置。

在得到每个字母最后一次出现的下标位置之后,可以使用贪心的方法将字符串划分为尽可能多的片段,具体做法如下。

  • 从左到右遍历字符串,遍历的同时维护当前片段的开始下标 start 和结束下标 end,初始时 start = end = 0。

  • 对于每个访问到的字母 c,得到当前字母的最后一次出现的下标位置 endc,则当前片段的结束下标一定不会小于 endc ,因此令 end = max(end, endc)。

  • 当访问到下标 end 时,当前片段访问结束,当前片段的下标范围是 [start, end],长度为 end − start + 1,将当前片段的长度添加到返回值,然后令 start = end + 1,继续寻找下一个片段。

重复上述过程,直到遍历完字符串。

上述做法使用贪心的思想寻找每个片段可能的最小结束下标,因此可以保证每个片段的长度一定是符合要求的最短长度,如果取更短的片段,则一定会出现同一个字母出现在多个片段中的情况。由于每次取的片段都是符合要求的最短的片段,因此得到的片段数也是最多的。

由于每个片段访问结束的标志是访问到下标 end,因此对于每个片段,可以保证当前片段中的每个字母都一定在当前片段中,不可能出现在其他片段,可以保证同一个字母只会出现在同一个片段。

代码:

/*
 * @lc app=leetcode.cn id=763 lang=cpp
 *
 * [763] 划分字母区间
 */

// @lc code=start
class Solution
{
public:
    vector<int> partitionLabels(string s)
    {
        int last[26];
        int length = s.size();
        for (int i = 0; i < length; i++)
            last[s[i] - 'a'] = i;
        vector<int> ans;
        int start = 0, end = 0;
        for (int i = 0; i < length; i++)
        {
            end = max(end, last[s[i] - 'a']);
            if (i == end)
            {
                ans.push_back(end - start + 1);
                start = end + 1;
            }
        }
        return ans;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是字符串的长度。需要遍历字符串两次,第一次遍历时记录每个字母最后一次出现的下标位置,第二次遍历时进行字符串的划分。

空间复杂度:O(∣Σ∣),其中 Σ 是字符串中的字符集。这道题中,字符串只包含小写字母,因此 ∣Σ∣=26。

【Agora 本地录制最全总结- 基于Java SDK】 Agora 本地服务端录制 阅读详情

相关推荐

MLNX_OFED 5.4-3.7.5.0 驱动安装:银河麒麟V10SP2 ARM 内核升级后编译避坑 3 步

本文详细介绍了在银河麒麟V10SP2 ARM环境下安装MLNX_OFED 5.4-3.7.5.0驱动的完整流程,包括内核升级后的驱动兼容性挑战、编译环境准备、分步编译与安装流程以及性能优化与故障排查。特别针对国产化ARM服务器(如华为Atlas系列)提供了实用的解决方案和常见问题处理建议,帮助用户顺利完成mlnx网卡驱动的安装与配置。

weixin_29184075的博客 406

763. 划分字母区间(力扣LeetCode)

给你一个字符串 s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。输入:s = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”、“defegde”、“hijhklij”。每个字母最多出现在一个片段中。

m0_73841621的博客 1093

从零开始:使用Labelme完成图像语义分割标注全流程

本文详细介绍了如何使用Labelme工具完成图像语义分割标注的全流程,从环境安装、数据准备到核心标注操作,并重点讲解了如何将标注结果转换为PASCAL VOC等深度学习框架可用的标准数据集格式。文章还提供了关键的避坑指南和高效技巧,帮助初学者快速上手,高效产出高质量的标注数据。

weixin_29073241的博客 493

LeetCode 763 划分字母区间

LeetCode 763 划分字母区间 题目链接 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划

旺崽的博客 2498

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

Shader Graph入门

Shader Graph 简介

zaizai1007的博客 1万+

LeetCode 763. 划分字母区间

LeetCode 划分区间 合并区间

PZHU_CG_优快云的博客 446

英飞凌TC3xx DSADC旋变软解码实战:从示波器波形到VX1000数据,手把手教你避坑

本文详细介绍了英飞凌TC3xx系列微控制器的DSADC模块在电机旋变软解码中的实战应用。从示波器波形分析到VX1000数据采集,提供了一套完整的调试方法论,帮助工程师快速定位和解决常见问题,提升解码精度和系统性能。

weixin_30598225的博客 517

力扣-763划分字母区间

题目 1.描述 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 2.示例 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。 3.思路 找当前遇到

dychf的博客 241

【QNX Hypervisor 2.2 用户手册】2.6 处理qvm终止

你可以注册通知,以在qvm进程实例退出时得到通知。这样你就可以采取相应的措施来响应这种终止事件。

从0到1,突破自己 1108

libVLC 视频抓图

libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 1946

leetcode(力扣) 763. 划分字母区间

思路:从a开始遍历,a的最后一次出现的位置是8,如果从a到8这个位置之间的所有元素的最远位置都在8之内,则这就可以划分为一个区间。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。划分结果为 “ababcbaca”, “defegde”, “hijhklij”。比如下图第二个区间中的d最远距离为14,扫描到e的时候,最远距离更新为15.

深度不学习!!的博客 884

AgentScope 实战训练营-7 种多智能体协作模式详解

本教程基于阿里巴巴开源的AgentScope Java框架,系统讲解多智能体系统的开发方法。涵盖7种核心协作模式:Pipeline流水线、Routing路由、Handoffs智能体交接、Supervisor监督器、Subagent子智能体、Skills技能系统及Workflow工作流。详细阐述ReActAgent、AgentScopeAgent、StateGraph等核心概念,提供完整的配置示例与代码实现,帮助开发者快速掌握基于Spring AI Alibaba的多智能体应用开发。

program哲学 164

力扣-贪心算法-763. 划分字母区间

力扣-贪心算法-763. 划分字母区间

qianxunsiyue的博客 605

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【LeetCode: 763. 划分字母区间 + 贪心】

【LeetCode: 763. 划分字母区间 + 贪心】给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。

Coder_ljw的博客 1141

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 763. 划分字母区间 | Python

使用双指针找最远位置的思路,解决 LeetCode《763.划分字母区间》问题

"大梦三千秋的博客 778

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【练习】【贪心】力扣763. 划分字母区间

我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。[“abab”, “cc”],但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。然后遍历字符串时,将右端点更新为当前遍历到的字母的最远位置,当。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。输入:s = “ababcbacadefegdehijhklij”返回一个表示每个字符串片段的长度的列表。时,说明遍历出了一个符合条件的字符串,将。输出:[9,7,8]

2402_86344613的博客 512

leetcode 763 : 划分字母区间

leetcode 763 : 划分字母区间 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 示例: 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片

yingmu__的博客 262

【贪心算法】——力扣763. 划分字母区间

中等[相关标签] [相关企业]给你一个字符串 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 。返回一个表示每个字符串片段的长度的列表。输入: 输出: 解释: 划分结果为“”、“”、“”,每个字母最多出现在一个片段中。 像“”,“”这样的划分是错误的,因为划分的片段数较少。输入: 输出:—————————————————————————————————————————————— 如何实现用和记录最后出现的位置??以

weixin_47868976的博客 1252

力扣Leetcode之Java解题763划分字母区间

leetcode之java刷题

小李子Lee 290

力扣763-划分字母区间

像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。4.如果 i 等于 end,那么说明成功合并区间,将 end - start + 1 放入答案数组中。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。划分结果为 "ababcbaca"、"defegde"、"hijhklij"。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是。,区间有重叠的字母为 e f g,将这四个区间取并集,就是。

Kevincxt的博客 226

Leetcode(763)——划分字母区间

划分字母区间

KCDCY的博客 734

力扣 763.划分字母区间

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。统计每一个字符最后出现的位置从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点i < n;i++) {// 每个字母最后出现的下标i < n;i++) {// 更新当前区间右端点的最大值if (right == i) { // 当前区间合并完毕// 区间长度加入答案。

qq_51352130的博客 918

763. 划分字母区间 - 力扣(LeetCode)

我们使用一个数组来记录每个字母出现的最远位置,然后使用 跳跃游戏II 的策略,滑动窗口的思想。我们不断遍历目标字符串每个字符出现的最远位置,不断更新右边界(右边界就是最远位置),如果到了右边界就将区间长度加入结果集(代表到了分割点),然后使得左边界加1,继续使用滑动窗口更新右边界。像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。

weixin_48613005的博客 727

力扣763-划分字母区间(Java详细题解)

我们可以将每一个字母所出现的最大下标位置给求出,然后遍历该字符串,并在原来的最大范围内并扩大该范围,只有该范围不能再扩大了(即遍历到该片段的最大范围),那么这时求的就是最小的字符片段。如果不这样,虽然你的片段范围是小了,但是你的这个片段并不符合题意,题目要求不同片段内,同一字母只能出现一次。你只有将该片段内的最大的字母下标位置确定下来,你才能确定该片段内所有的字母不会出现在其他的片段内。那么肯定就有人想,我们不是要求最小的片段吗,那这个片段的范围不是越小越好吗?题目要求不同片段内,同一字母只能出现一次。

2302_79761426的博客 739

力扣763 划分字母区间 Java版本

像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。划分结果为 “ababcbaca”、“defegde”、“hijhklij”。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。输入:s = “ababcbacadefegdehijhklij”返回一个表示每个字符串片段的长度的列表。输入:s = “eccbbbbdec”输出:[9,7,8]

m0_47066863的博客 770
上一篇: Leetcode452. 用最少数量的箭引爆气球
下一篇: Leetcode122. 买卖股票的最佳时机 II
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值