Leetcode 763 划分字母区间

题意理解:

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

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

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

        输入:s = "ababc bacad efeg"
        输出:[9,6]

        划分的结果是当前片段内的字母不会出现在其他片段里     

解题思路

        总是记录每个字母的最后出现的位置。则每个元素到其在s中出现的最后位置形成区间。

        我们的目标是:同一个元素总是出现在一个片段里。

        所以每个元素的出现区间总是包括在一个划分里

        则该题就变成了一个区间重叠合并的问题。

        如果两个元素的出现区间相互重叠,则须对区间的右区间进行延长,划分为一个区间片段

        我们采用贪心算法来解决这个问题,我们总是在区间的右边界上做延长,直到延长到最大可延长的位置,则划分为一个区间。

        

1.贪心解题 

为了将其转换为区间合并问题,则:

        首先记录每个元素的最后出现位置,与当前位置形成字母出现区间。

        其次,根据出现区间实现区间右边界贪心探索。

        直到右边界不能继续向右探索位置,可划分一个区间,区间数+1。

public List<Integer> partitionLabels(String s) {List<Integer> result=new ArrayList<>();//记录元素出现的最后一个位置int[] lastPoisition=new int[26];for(int i=0;i<s.length();i++){lastPoisition[s.charAt(i)-'a']=i;}//区间合并int left=0,right=lastPoisition[s.charAt(0)-'a'];for(int i=0;i<s.length();i++){//贪心右边界探索right=Math.max(right,lastPoisition[s.charAt(i)-'a']);//记录区间大小if(right==i){result.add(right-left+1);left=i+1;}}return result;}

2.分析

时间复杂度:O(n),时间复杂度主要用在两次遍历字符串上,n为输入字符串的长度。

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

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

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

相关文章

Java——值得收藏的Java final修饰符总结!!!

Java final修饰符总结 一、final修饰类二、final修饰方法三、final修饰变量 总结 算下刚转Java到现在也有三个多月了&#xff0c;所以打算对Java的知识进行汇总一下&#xff0c;本篇文章介绍一下Java的final修饰符的作用&#xff0c;final表示最后的、最终的含义&#xff0c;fi…

硅像素传感器文献调研(三)

写在前面&#xff1a; 引言&#xff1a;也是先总结前人的研究结果&#xff0c;重点论述其不足之处。 和该方向联系不大&#xff0c;但还是有值得学习的地方。逻辑很清晰&#xff0c;易读性很好。 1991年—场板半阻层 使用场板和半电阻层的高压平面器件 0.摘要 提出了一种…

没错,这条短视频烂尾了

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 “你这个太标题党了&#xff0c;后悔点进去了” “松哥&#xff0c;下次增加点故事情节” “你这是哪是沉浸式&#xff0c;你这是自嗨啊” “那你这拍了个寂寞” “这视频&#xff0c;开头可以&#xff0c;烂尾了” …

如何从 DSA 切换到 PMax 以使您的 Google 付费广告面向未来

为了在 Google Ads 不可避免的过渡期之前&#xff0c;我们将介绍如何从动态搜索广告切换到效果最大化广告 如何从 DSA 切换到 PMax 以使您的 Google 付费广告面向未来 变化是唯一不变的&#xff0c;尤其是在数字广告中——您可能听说过一些关于动态搜索广告 &#xff08;DSA&…

webstorm中直接运行ts(TypeScript)

参考&#xff1a;https://www.cnblogs.com/yangfanjie/p/12036118.html 1&#xff1a;安装ts: npm install -g typescript 2&#xff1a;安装直接运行所需依赖包&#xff1a; npm install -g ts-node 3&#xff1a;在设置中安装安装插件后重启 4&#xff1a;重启后就会发现在…

高效编写测试用例

本话题暂不探讨是否有必要编写详细的测试用例&#xff0c;在确定要交付详细的测试用例这个前提下&#xff0c;分享如何更高效地完成测试用例的编写。 对齐测试用例需求 首先、明确要完成的测试用例文档目标要求&#xff0c;模板、范围、粒度等。 用例文档使用者&#xff1a;…

github登录需要双因素认证(Two-factor authentication)

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 github登录需要双因素认证&#xff08;Two-factor authentication&#xff09; 今天登录github发现需要绑定双因素才能够登录 我们…

提升设计效率:全面了解如何使用Figma插件

Figma组件库包括颜色、字体、图标、按钮、阴影、圆角、间距等。当Figma组件库的样式和Figma组件达到一定数量时&#xff0c;将难以维护&#xff0c;设计和开发的对接成本将大大提高。Figma可以在同一母版下单独设置样式&#xff0c;而不影响与母版之前的关系&#xff0c;这是Sk…

基于ssm兰亭序图书管理系统论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

在微服务中如何实现全链路的金丝雀发布?

目录 1. 什么金丝雀发布&#xff1f;它有什么用&#xff1f; 2.如何实现全链路的金丝雀发布 2.1 负载均衡模块 2.2 网关模块 2.3 服务模块 2.3.1 注册为灰色服务实例 2.3.2 设置负载均衡器 2.3.3 传递灰度发布标签 2.4 其他代码 2.4.1 其他业务代码 2.4.2 pom.xml 关…

SpringBoot 3.2.0 结合Redisson接入Redis

依赖版本 JDK 17 Spring Boot 3.2.0 Redisson 3.25.0 工程源码&#xff1a;Gitee 集成Redis步骤 导入依赖 <properties><redisson.version>3.25.0</redisson.version> </properties> <dependencies><dependency><groupId>org.pr…

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示&#xff0c;每个线性变换都对应着一个矩阵 例&#xff1a; 考虑一个变换 T T T&#xff0c;使得平面上的一个向量投影为平面上的另一个向量&#xff0c;即 T : R 2 → R 2 T:R^2 \to R…