[算法基础] 字符串操作-划分字母区间

Android Profiler 帧率优化实战与性能调优 本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。 阅读详情

题目

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

示例 1:

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

提示:

S的长度在[1, 500]之间。
S只包含小写字母 ‘a’ 到 ‘z’ 。

解题思路

本题可以使用贪心算法进行计算。
我们的策略就是不断的选择从左边起的最小区间。可以从第一个字母开始分析,确定区间之后,再次从该区间内继续进行分析。
例如:abccaddbeffe 的第一个区间不是abcca,而需要继续寻找b和c的区间。
我们的通解为:对于遇到的每一个字母。去找到这个字母最后一次出现的位置,用来更新当前的最小区间。

/**
 * @param {string} S
 * @return {number[]}
 */
var partitionLabels = function(S) {
    const arr = [];
	// 从第一个字母开始寻找。
    for (let i = 0, len = S.length; i < len;) {
        const lastIndex = S.lastIndexOf(S[i]);
		// 如果当前位置就是最后出现的位置 则区间长度为1
        if (lastIndex === i) {
            arr.push(1);
            i++;
        // 如果当前位置不是最后出现的位置
        } else {
        	// 设置末尾
            let endIndex = lastIndex;
			// 从第二个字母开始找起,寻找起最后出现的位置。
            for (let j = i + 1; j < endIndex; j++) {
                const tempS = S[j];
                const tempLastIndex = S.lastIndexOf(tempS);
                endIndex = tempLastIndex > endIndex ? tempLastIndex : endIndex;
            }
			// 添加长度,并确定下次循环的起点。
            arr.push(endIndex - i + 1);
            i = endIndex + 1;
        }
    }
    return arr;
};
4.6 知识库使用指南:如何让AI Agent拥有专业知识 本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。 阅读详情

相关推荐

流媒体学习之路(mediasoup)——simulcast 与 svc 简介(7)

流媒体学习之路(mediasoup)——simulcast 与 svc(7) 文章目录流媒体学习之路(mediasoup)——simulcast 与 svc(7)

qw225967的博客 7339

2020-10-22 划分字母区间

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

nqcqwer的博客 317

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

[CEOI2017]Palindromic Partitions

[CEOI2017]Palindromic Partitions 题目大意: 给出一个长度为\(n(n\le10^6)\)的只包含小写字母字符串,要求你将它划分成尽可能多的小块,使得这些小块构成回文串。 思路: 哈希以后从两侧往里贪心,尽量取短的。 时间复杂度\(\mathcal O(n)\)。 源代码: #include<cstdio> #include<cctype> ...

weixin_34233618的博客 363

低功耗蓝牙技术 > GAP和GATT介绍

GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,通信是双向的,不同于GAP的单向通信。

DL_62532的专栏 4031

从SSTS到CTS:解码汽车电子架构中的需求与实现规范

本文深入解析汽车电子架构中SSTS(子系统功能规范)与CTS(零部件技术规范)的转换过程,揭示从抽象需求到物理实现的关键步骤。通过实际案例说明如何将SSTS的功能逻辑、接口定义和性能指标转化为具体的CTS实施方案,并分享多供应商协同与测试验证的最佳实践,帮助开发者高效完成汽车电子系统开发。

weixin_29201859的博客 499

poj 3790 Recursively Palindromic Partitions dp水题

//poj 3790 //sep9 #include using namespace std; int dp[1024]; int rec(int n) { if(n==0) return 1; if(dp[n]!=-1) return dp[n]; int sum=0; if(n%2){ for(int i=1;i<=n;i+=2) sum+=rec((n-i)/2);

sepNINE的专栏 861

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

763. 划分字母区间

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

小桥流水 234

〖Python网络爬虫实战㊴〗- 极验滑块介绍(一)

我们对这个看到不陌生,现在,大多数平台都是用的是这个平台的验证码,我们今天来学习一下,极验滑块验证码的逆向,其他的都差不多。我们了解到这个平台提供了许多验证的方式。现在大多数还是滑块比较多,滑块验证码是一种常见的验证方式,其主要思路为用户通过拖动滑块来完成验证。具体流程如下:首先,用户需要进行滑块验证码的操作,网站会向用户展示一张图片,图片上通常会有一些随机的文字和背景干扰。用户需要通过鼠标拖动滑块,将其移动到指定位置上,通常是将滑块拖动到图片的相应位置上来完成验证。

爱吃饼干的小白鼠的博客 2879

5步VS传统WinForm!AntdUI让界面设计从“土味”到“超模”只需30秒?

摘要:墨瑾轩编程教程《AntdUI的5大魔法步骤》详解如何将传统WinForm升级为现代化UI。教程通过5个核心步骤:安装AntdUI库、控件替换、主题定制、复杂布局构建及实战案例演示,对比传统开发与AntdUI在美观度(动态阴影/动画)、开发效率(拖拽组件VS手工绘制)和主题定制(一键换肤VS重写控件)的显著差异。使用C#代码示例展示按钮动画、3D翻转、聊天界面等特效实现,帮助开发者快速掌握这一基于Ant Design风格的WinForm增强框架。(150字)

java专栏 1129

【leetcode千题】763. 划分字母区间

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

YFR718的博客 252

2-1 AUTOSAR ASW概述

应用软件层(Application Software Layer,ASW)位于AUTOSAR整个架构的顶层。它由各种AUTOSAR Software Component(SW-C)组成,每个SW-C封装了各种应用的功能集。每个SW-C只能运行在一个ECU中。ASW层的设计目标是实现功能的可重用性和可配置性。它通过封装底层提供的服务,为上层应用层提供统一的接口。ASW层的开发可以基于AUTOSAR提供的标准化软件组件,也可以根据具体需求进行定制开发。

qq_42357877的博客 1903

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

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

weixin_47868976的博客 1252

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

贪心算法 15. 划分字母区间

​初始化为-1,可以保证第一个partition的计算不会出错(因为要boundary相减获得划分长度)题目要求同一字母最多出现在一个片段中,那么如何把同一个字母的都圈在同一个区间里呢?一想到分割字符串就想到了回溯,但本题其实不用回溯去暴力搜索。空间复杂度:O(1),使用的hash数组是固定大小。此时前面出现过所有字母,最远也就到这个边界了。​中出现的各字母进行区间统计,也就是对应字母的。在遍历的过程中相当于是要找每一个字母的边界,如果没有接触过这种题目的话,还挺有难度的。​出现的索引,存储到。

m0_49844155的博客 968

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【贪心算法】划分字母区间

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

永生只是一场幻梦 3039

Java实现 LeetCode 763 划分字母区间(暴力)

763. 划分字母区间 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片...

Marcus 3380

算法日记day 32(贪心之划分字母区间|合并区间|单调递增的数字|监控二叉树)

如何确立划分的一个片段有多少是关键,我们需要记录同一个字母的下标,在循环遍历字符串的过程中,每当相同的字母出现一次就更新成最新的位置,在遍历时如果找到最远出现下标的位置,说明找到了分割点,此时就属于一个片段,记录其长度至结果数组中,重复此操作,直到找到遍历完全部字符串。首先对全部区间的左边界从小到大排序,遍历的过程中比较该区间的左边界是否小于上一个区间的右边界 ,如果是,说明这两个区间有重合部分需要合并,合并时需取两区间左边界较小的值,右边界较大的值,然后存入结果数组中,最后输出结果数组。

m0_74980681的博客 1001

想要精通算法和SQL的成长之路 - 划分字母区间

想要精通算法和SQL的成长之路 - 系列导航。

Zong_0915的博客 622

代码随想录算法训练营第day36|435. 无重叠区间 、 763.划分字母区间 、 56. 合并区间

此时问题就是要求非交叉区间的最大个数。这里记录非交叉区间的个数还是有技巧的,如图:区间,1,2,3,4,5,6都按照右边界排好序。当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?就是取。

qq_60513199的博客 1146

代码随想录刷题day36|无重叠区间&划分字母区间&合并区间

明天结束贪心了,加油。

东东唯一指定铲屎官 1021

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

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

-happy 的博客 377

Leetcode 763. 划分字母区间 C++

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

weixin_43750513的博客 439

LeetCode763. 划分字母区间

//763. 划分字母区间 //简单的合并区间 class Solution { public: vector<int> partitionLabels(string S) { int n = S.size(); vector<int> num[26]; for (int i = 0; i < n; i++) { num[S[i] - 'a'].emplace_back(i); } vector<pair<in

Ember_Sky 158

day36 无重叠区间 划分字母区间 合并区间

合并所有重叠区间intervals[i]=[starti,endi],返回不重叠的区间数组 边界值相等也视为重叠。intervals[i]=[starti,endi] 移除区间,使得区间互不重叠,返回移除区间的最小数量。将所有划分结果顺序连接,得到的字符串仍是s 返回每个字符串片段的长度。将字符串划分为尽可能多的片段,使得同一字母最多出现在一个片段。相邻区间挨在一起,尽量移除重叠区间。

qq_43773652的博客 1084

[双指针] 763. 划分字母区间

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

khermit的专栏 216

贪心算法-区间问题-划分字母区间

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

shadowgully的博客 315
上一篇: [算法基础] 字符串操作-最长公共前缀
下一篇: [算法基础] 数字操作-整数反转
whitsats
博客等级 码龄15年 38粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值