力扣:763. 划分字母区间

763. 划分字母区间

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

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

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

示例 1:

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

示例 2:

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

提示:

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

1、使用函数记录最远距离

class Solution {public List<Integer> partitionLabels(String s) {        List<Integer> ans = new ArrayList<>();for(int i = 0;i < s.length();i++){char a = s.charAt(i);int idx = s.lastIndexOf(String.valueOf(a));//使用函数记录最远距离if(ans.size()==0||i>ans.get(ans.size()-1)){//增加结果集ans.add(idx);}else{ans.set(ans.size()-1,Math.max(ans.get(ans.size()-1),idx));//更新最远距离} }int k = 0;for(int i = ans.size()-1;i >= 0;i--){//计算长度if(i==0){ans.set(i,ans.get(i)+1);continue;}ans.set(i,ans.get(i)-ans.get(i-1));}return ans;}
}

2、遍历一次记录最远距离

class Solution {public List<Integer> partitionLabels(String s) {List<Integer> list = new LinkedList<>();int[] remote = new int[26];char[] chars = s.toCharArray();for(int i = 0;i < chars.length;i++){remote[chars[i] - 'a'] = i;//得到最远下标}int idx = 0;int last = -1;for(int i = 0;i < chars.length;i++){idx = Math.max(idx,remote[chars[i] - 'a']);//动态更新最远下标if(i == idx){//当遍历到此处时,说明前面的所有值的最远下标都包含其中了list.add(i - last);//记录长度last = i;//更新起始点}}return list;}
}

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

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

相关文章

iOS 侧滑手势的打开关闭

方法一&#xff1a; 参考文章&#xff1a;点这里 方法二&#xff1a; - (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];[self.navigationController.navigationBar setHidden:NO];//在其他离开改页面的方法同样加上下面两句代码self.isTapBac…

Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期

攻击者改变了策略&#xff0c;在某些情况下转向勒索软件。安全和风险管理领导者必须通过提高检测和预防能力来为勒索软件攻击做好准备&#xff0c;同时还要改进其事后应对策略。 主要发现 勒索软件&#xff08;无加密的数据盗窃攻击&#xff09;是攻击者越来越多地使用的策略。…

git的标签管理

理解标签 在Git中,标签tag用于标记特定的一个重要点&#xff0c;比如版本发布。标签允许捕捉某一次提交的状态&#xff0c;当我们需要退回到某次提叫的版本时&#xff0c;通过标签我们快速定位到。标签具有两种类型&#xff1a; 轻量标签&#xff1a;最简单的标签形式&#x…

Linux(CentOS7)离线使用安装盘部署Telnet

[在线工具网 - 各类免费AI工具合集&#xff0c;免费pdf转word等](https://www.orcc.online) https://orcc.online 挂载镜像CentOS-7-x86_64-DVD-1810.iso到/mnt下&#xff08;其他位置也行&#xff09;&#xff0c;命令如下&#xff1a; mount /dev/sr0 /mnt 安装包默认在Pa…

C++ 概览并发

并发 资源管理 资源 程序中符合先获取后释放&#xff08;显式或隐式&#xff09;规律的东西&#xff0c;比如内存、锁、套接字、线程句柄和文件句柄等。RAII&#xff1a; (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”&#xff0c;是C语言的一种管…

[运维|系统] linux修改了/etc/fstab文件后,检查/etc/fstab文件是否正常

要求检查的原因 当修改了 /etc/fstab文件后&#xff0c;如果fstab中的内容出现错误&#xff0c;则会导致下次开机时&#xff0c;系统无法进入系统 检查命令 使用以下命令检查 fstab 文件内容是否正常 mount -a这个命令会尝试挂载 fstab 文件中列出的所有文件系统。如果 fst…

Vue.js-----vue组件

能够说出vue生命周期能够掌握axios的使用能够了解$refs, $nextTick作用能够完成购物车案例 Vue 生命周期讲解 1.钩子函数 目标&#xff1a;Vue 框架内置函数&#xff0c;随着组件的生命周期阶段&#xff0c;自动执行 作用: 特定的时间点&#xff0c;执行特定的操作场景: 组…

hw蓝初中级面试题整理(流量特征+场景题)

Webshell检测&#xff1a; 0、d盾河马阿里伏魔查杀1、有具体时间的话可以根据时间和正则匹配关键字定位&#xff0c;然后封ip&#xff0c;追踪ip最后做了什么2、在网络层监控 HTTP&#xff0c;并且检测到有人访问了一个从没访问过的文件&#xff0c;而且返回了 200&#xff0c…

SpringBoot使用注解标注过滤器:跟踪请求日志、处理跨域问题

文章目录 引言I 跟踪请求日志(LogFilter)II 过滤器处理跨域问题III 拦截器和过滤器的原理3.1 Filter的执行顺序在Interceptor之前3.2 RequestInterceptor将MDC中request_id传入header引言 @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 属性filterName声明…

[前后端基础]图片详解

[前后端基础]图片传输与异步-CSDN博客 https://juejin.cn/post/6844903782959022093#heading-3 base64、file和blob用JS进行互转的方法大全【前端】_js base64转blob-CSDN博客 后端存储方式 对于第一种存储方式&#xff0c;我们前端直接将存储路径赋值给 src 属性即可轻松显示。…

BufferGeometry--持续更新

.center&#xff08;&#xff09; 在Three.js中&#xff0c;BufferGeometry 对象的 .center() 方法是用于将几何体的原点&#xff08;0, 0, 0&#xff09;移到其包围盒的中心。这通常在你想要旋转、缩放或者对齐几何体时非常有用&#xff0c;因为它确保了这些操作是相对于几何…

STM32——GPIO输出(点亮第一个LED灯)

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

租赁商城小程序源码部署/售后更新/搭建上线维护

基于ThinkPHPFastAdminUniApp开发的租赁商城小程序&#xff0c;提供用户物品租赁服务的应用程序&#xff0c;方便客户搭建各种类型的租赁场景服务。通过小程序端多角色进行平台管理&#xff0c;用户租赁商品缴纳租金及押金&#xff0c;员工端可操作商品出库和归还&#xff0c;订…

文件夹名批量重命名:一键实现中文到意大利语的高效翻译!文件管理更高效!

文件夹管理成为了我们日常工作和生活中的重要一环。当文件夹名称繁杂且多样&#xff0c;尤其是涉及到不同语言时&#xff0c;如何快速、准确地批量重命名&#xff0c;成为了许多人的迫切需求。今天&#xff0c;我们就来聊聊如何轻松实现文件夹名从中文到意大利语的批量翻译&…

vue2中的配置代理和路由的使用

1.配置代理 在Vue.js 2中配置代理主要是为了解决开发环境下的跨域问题&#xff0c;通常用于前后端分离开发中。Vue.js本身并不提供代理功能&#xff0c;但是可以通过webpack-dev-server或者Vue CLI提供的配置进行代理设置。 下面是在Vue.js 2中配置代理的一般步骤&#xff1a…

用awk做log聚合

123456valueindexvaluevalueindex 日前拿到一份log&#xff0c;一个完整数据集被写在两条log里&#xff0c;通过索引字段排序后&#xff0c;呈现出如上表样式的csv格式。为了方便统计&#xff0c;利用awk对数据进行了聚合&#xff0c;把同一索引值的log两两合并在一起&#xf…

基于FPGA的视频矩阵切换方案

一、单个显示设备的系统方案&#xff1a;会议室只有1个显示设备 会议室的信号源有很多&#xff0c;但是显示设备只有1个&#xff0c;这个时候最佳方案是使用切换器。 &#xff08;1&#xff09;切换器&#xff08;控制方式&#xff1a;遥控器、软件、机箱面板、中控&#xff…

版本控制工具之Git的基础使用教程

Git Git是一个分布式版本控制系统&#xff0c;由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化&#xff0c;也是开发者协作编写代码的工具。 本文将介绍 Git 的基础原理、用法、操作等内容。 一、基础概念 1.1 版本控制系统 版本控制系统&#x…

Jmeter压测问题汇总

缘起 公司的Elasticsearch流量日益减少&#xff0c;经过评估&#xff0c;我们计划迁移到成本更低的Mysql集群上&#xff0c;需要对接口进行压力复测 版本 JDK17&#xff08;会有兼容性问题&#xff0c;建议使用JDK17之前的版本&#xff09;Jmeter 5.2.1 windows系统下临时端…

Python-----容器的介绍以及操作

1.列表和元组 1.列表是什么, 元组是什么&#xff1a; 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表 列表…