每日一题:无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是"b",所以其长度为 1。

提示:

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母、数字、符号和空格组成

利用可变长的滑动窗口,初始化start,end指向初始位置。使用hashmap记录某字符最后一次出现的下标,目的是当它再次出现时,可以直接滑动start到重复字符的下一位。

以end作为遍历指针,发现新字符a,加入map中。

加入字符b。

此时遇到了重复字符a,按照上面提到的,利用map存储的下标,直接将start滑到已记录的a的下一位。

这里可以发现map中的{c,0}其实已经不在这步中的子串中了,但我们无需对他进行操作,只需要进行一个判断字符对应的value值和当前start的大小,如果value更小,说明当前滑动窗口不包含对应的存储字符。

 遇到重复字符a,滑动start、end,更新map。

接下来碰到“重复”字符c,注意这里是假重复,按照上面所说,map中存储的c的下标小于了start,实际上是没有c的。

 向map添加新字符。

遇到重复字符a,移动start到a的下一位。

 

遇到重复字符c,移动start到c的下一位,同时end到了字符串末尾,遍历结束,输出过程中子串最长的大小。

 

代码:

class Solution {
public:int lengthOfLongestSubstring(string s) {int max_count = 0;int start = 0;std::unordered_map<char, int> map;for (int end = 0; end < s.length(); end++) {char c = s[end];if (map.find(c) != map.end() && map[c] >= start) {start = map[c] + 1;}map[c] = end;max_count = std::max(max_count, end - start + 1);}return max_count;}
};

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

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

相关文章

2009-2021年上市公司僵尸企业识别数据(含原始数据+计算代码+计算结果)

2009-2021年上市公司僵尸企业识别数据&#xff08;含原始数据计算代码计算结果&#xff09; 1、时间&#xff1a;2009-2021年 2、指标&#xff1a; 证券代码 、证券简称、上市日期、year、净利润、政府补助、流动负债合计、负债合计、财务费用明细利息支出、资产总计、长期负…

SpringBoot中的常见注解详细介绍,附带代码示例

注意&#xff1a;本文不仅含有SpringBoot中常见的注解&#xff0c;还有其它框架的注解。因为注解之间会相互配合使用&#xff0c;所以每一个注解的示例与其他的注解都会有部分相似&#xff0c;请选择查看。 文章目录 01、SpringBootApplication02、Configuration03、EnableAuto…

算法设计中的一些核心原则

1.命名并实体化一切非自解释的概念 这是算法设计的核心原则之一。可以进一步归结为&#xff1a;你不可让逻辑匿名地裸露出来。你必须命名一切你知晓的概念&#xff0c;并且通过注释、适当的代码粒度管理&#xff0c;命名&#xff0c;妥善封装这些概念&#xff0c;比如&#xf…

(Oracle)SQL优化案例:隐式转换优化

项目场景 项目现场的某个kettle模型执行非常缓慢&#xff0c;原因在于某个SQL执行效率非常的低。甲方得知此事要求公司赶紧优化&#xff0c;负责该模块的同事对SQL优化并不熟悉。所以作为一个立志成为优秀DBA的ETL工程师&#xff0c;我自告奋勇&#xff1a;不是DBA&#xff0c;…

ES6 关于Class类的继承 extends(2024-04-10)

1、简介 类Class 可以通过extends关键字实现继承&#xff0c;让子类继承父类的属性和方法。extends 的写法比 ES5 的原型链继承&#xff0c;要清晰和方便很多。 class Foo {constructor(x, y) {this.x x;this.y y;console.log(父类构造函数)}toString() {return ( this.x …

《由浅入深学习SAP财务》:第2章 总账模块 - 2.7 总账模块报表 -2.7.1 对外报表:资产负债表及利润表

总账模块报表既包括对外报告的资产负债表、损益表、现金流量表&#xff0c;也包括企业自身用于查询和分析的各类报表&#xff0c;如科目余额表等。 2.7.1 对外报表&#xff1a;资产负债表及利润表 在SAP中&#xff0c;出具资产负债表和利润表的标准方法是先在后台建立一套“会…

971: 统计利用先序遍历创建的二叉树的深度

解法&#xff1a; 1.先序遍历创建二叉树链表形式 2.求二叉树的深度 用后序遍历实现&#xff1a; 1.后序遍历求节点A左右子树高度 2.对节点A&#xff1a; 1.取左右子树较大高度 2.返回高度1&#xff08;即以节点A为根节点的子树的最大深度&#xff09; 例如 #include <ios…

LINUX命令行后台运行matlab程序

UBUNTU安装了matlab&#xff0c;需要后台运行matlab程序。 一、MobaXterm程序&#xff08;非后台&#xff09; 使用mobaxterm程序&#xff0c;ssh连接ubuntu&#xff0c;在对应账号中输入matlab&#xff0c;即可基于mobaxterm自带的Xserver可视化界面&#xff0c;打开matlab界…

多多采集器使用指南 拼多多商家爬虫工具介绍

多多采集器是一款功能强大的数据采集工具&#xff0c;特别适用于拼多多商家爬虫任务。它可以帮助用户快速、高效地采集拼多多商家的信息&#xff0c;并提供了丰富的数据处理和导出功能。本文将介绍多多采集器的基本使用方法&#xff0c;并附带示例代码来演示如何使用多多采集器…

RobotFramework功能自动化测试框架基础篇

概念 RobotFramework是什么&#xff1f; Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性&#xff0c;支持关键字驱动&#xff0c;可以同时测试多种类型的客户端或者接口&#xff0c;可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试…

网页的基本结构

VScode中HTML的自动补全&#xff1a; 自动补全&#xff1a;例如标签 <h1></h1> 1.输入<h1>后其会自动给其补全 2. 进输入h1 tab键 网页的基本结构&#xff1a; 网页的基本结构只需要在VScode当中输入&#xff1a;&#xff01; tab键即可 <!DOCTYPE html…

ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit

ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit 8.1 About the MPU Cortex R52 处理器具有两个可编程的MPU&#xff0c;由EL1和EL2控制。每个MPU允许将4GB内存地址划分为多个区域。 每个内存区域由基地址、限制地址、访问权限和内存属性定义。 对于数据访问…

阿里对象储存OSS的SDK使用

对象存储OSS 该功能的实现使用了阿里的&#xff1a;对象存储OSS技术。 在阿里对象存储空间的文件可以 以链接 的形式进行访问: 文件访问路径规则 &#xff1a;https://BucketName.Endpoint/ObjectName 该技术的使用方式有很多&#xff0c;针对于SDK的简单实现官网上也有教程…

go 利用channel控制并发

任务数量为50&#xff0c;并发在5&#xff0c;全部都要执行 package mainimport ("fmt""time" )type Con struct {num inttime string }func main() {//channel实现并发控制// 定义同时执行的任务数量concurrencyLevel : 5//总任务数totalTask : 50// 创…

【网络编程】高性能并发服务器源码剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之洪水网络攻击&#xff0c;在这篇文章中&#xff0c;你将会学习到在网络编程中如何搭建一个高性能的并发服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&#xf…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境&#xff0c;要在另一个设备上运行&#xff0c;还要重新配置&#xff0c;好麻烦。 存在的方法 pip install -r requirement.txt …

Node.js留言板(超详细注释)

目录结构如下 app.js // 一.引入模块 var http require(http);// 用于创建 HTTP 服务器和处理 HTTP 请求 var fs require(fs);// 用于读取和写入文件 var url require(url);// 用于解析URL// 创建留言数据对象 var msgs [{ name: 牛二, content: "我是妞儿", cr…

Flink学习(五)-流式分析

一、时间分类 事件时间(event time)&#xff1a; 事件产生的时间&#xff0c;记录的是设备生产(或者存储)事件的时间 摄取时间(ingestion time)&#xff1a; Flink 读取事件时记录的时间 处理时间(processing time)&#xff1a; Flink pipeline 中具体算子处理事件的时间 二、…

场景:数据库死锁

来自hollis八股文 流程图 前置知识 数据库上锁锁住的不是行&#xff0c;而是索引的主键 比如我对id 1的主键进行上锁&#xff0c;实际上是对查询使用的主键的key 1 进行上锁 对非聚簇索引操作时&#xff0c;首先会对非聚簇索引上锁&#xff0c;然后在请求主键的锁 比如我…

为什么开关电源变压器的耦合不可能为100%?什么是漏感?

一、为什么开关电源变压器的耦合不可能为100%&#xff1f; 变压器耦合度是指变压器初级绕组和次级绕组之间能量传递的效率&#xff0c;它反映了变压器在电磁感应过程中&#xff0c;初级侧磁通量能够有多少比例被次级侧有效利用。理论上&#xff0c;理想的变压器耦合度应该是10…