LeetCode 热题 100——无重复字符的最长子串(滑动窗口)

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

从s字符串中,去找出连续的子串,使该子串中没有重复字符,返回它的最长长度。

暴力枚举

依次以第一个、第二个、第三个等等为起点去遍历字符串,并且找出不连续子串的最大长度。我们可以借助哈希来解决不重复这个操作。

代码如下

class Solution 
{
public:int lengthOfLongestSubstring(string s) {int n=s.size();int ret = 0;for(int i=0;i<n;i++){// 每次换遍历起点的时候都重新创建一个新的哈希表int hash[128]={0};for(int j=i;j<n;j++){// 将该遍历字符插入哈希表hash[s[j]]++;// 如果该位置字符的次数>1 则存在重复元素 直接跳出if(hash[s[j]]>1)break;// 计算最大长度ret=max(ret,j-i+1);}}return ret;}
};

滑动窗口

暴力枚举的缺点

从我们暴力枚举画图的过程中我们能发现一个事情。如图所示:

注意五角星的位置,我们能发现当我们依次去使用第二个字符为起点的时候,依然是遍历到了此位置,那么是为什么呢?

原因是我们原字符串中的a并没有移走,因此,我们就算以第二个字符作为起点,等到遍历到第二个a的时候依然是重复的,那么我们能不能遍历的时候先把重复的元素给移除掉,然后再进行遍历呢?

那么我们就引出了我们的滑动窗口操作。 

滑动窗口步骤

我们滑动窗口分为几个简单的步骤:

1.定义两个边界的变量 -- left=0,right=0

2.进窗口 -- 让字符进入哈希表
3.判断 -- 窗口内出现重复字符
  出窗口 -- 从哈希表中删除该字符

4.更新结果

图解

代码如下:

class Solution 
{
public:int lengthOfLongestSubstring(string s) {int hash[128]={0};int n=s.size();int ret =0 ;for(int left=0,right=0;right<n;right++){hash[s[right]]++;while(hash[s[right]]>1)hash[s[left++]]--;ret=max(right-left+1,ret);}return ret;}
};

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

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

相关文章

华为数通方向HCIP-DataCom H12-821题库(单选题:261-280)

第261题 以下关于IPv6过渡技术的描述,正确的是哪些项? A、转换技术的原理是将IPv6的头部改写成IPv4的头部,或者将IPv4的头部改写成IPv6的头部 B、使用隧道技术,能够将IPv4封装在IPv6隧道中实现互通,但是隧道的端点需要支持双栈技术 C、转换技术适用于纯IPv4网络与纯IPv…

SegNeXt学习记录(一):配置环境 测试代码

安装配置MMSegmentation环境 为了验证 MMSegmentation 和所需的环境是否安装正确&#xff0c;我们可以运行示例 python 代码来初始化分段器并推断演示图像&#xff1a; from mmseg.apis import inference_segmentor, init_segmentor import mmcvconfig_file configs/pspnet/…

能力和结果之间的关系

大家好,这里是大话硬件。 今天这篇文章想和大家分享前段时间的一点工作体会,关于个人能力和工作结果之间的关系。 其实这些感悟是在上周三晚上下班,走在回家的路上,脑海中突然出现这样的体会,回到家里立马写了下来。因为是即时的灵感,完全是因为工作状态触发,立刻写下…

win11 pip.ini

windows pip.ini 文件管理器文件路径地址栏敲&#xff1a;%APPDATA% 回车&#xff0c;快速进入 C:\Users\电脑用户\AppData\Roaming 文件夹中 新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件 新增 pip.ini 配置文件内容 然后在pip.ini中填写&#xff1a; [global] ind…

oracle报错 ORA-02290: 违反检查约束条件问题

保存数据库信息时&#xff0c;提示违反检查约束条件&#xff0c;如图&#xff1a; org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-02290: 违反检查约束条件 (MXUSER…

龙迅LT6911UXE HDMI转2PORT MIPIDSI/CSI,支持单PORT 4K60HZ,内置MCU,加音频

龙迅LT6911UXE 1.描述&#xff1a; LT6911UXE是一款高性能HDMI2.0到MIPI DSI/CSI转换器&#xff0c;可用于VR、智能手机和显示器应用。 HDMI2.0输入支持高达6Gbps的数据速率&#xff0c;这为60Hz的视频提供了足够的带宽。同时&#xff0c;还支持 HDCP2.3进行数据解密。对于M…

数学建模:相关性分析

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;相关性分析 文章目录 数学建模&#xff1a;相关性分析相关性分析两变量的相关分析PearsonSpearmanKendall tua-b 双变量关系强度测量的指标相关系数的性质代码实现example偏相关分析 相…

如何打war包,并用war包更新服务器版本

1.打包&#xff0c;我用的maven打包 先执行clean将已经生成的包清除掉 清除完&#xff0c;点package进行打包 控制台输出success&#xff0c;证明打包成功了 文件名.war的后缀就是生成的war包 2.将war包上传致服务器 一般会在war包加上日期版本上传至服务器 解压上传的war…

阿里云2核4G服务器5M带宽5年费用价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

代码随想录day42|背包问题416. 分割等和子集

背包问题二维数组 def test_2_wei_bag_problem1():weight [1, 3, 4]value [15, 20, 30]bagweight 4# 二维数组dp [[0] * (bagweight 1) for _ in range(len(weight))]# 初始化for j in range(weight[0], bagweight 1):dp[0][j] value[0]# weight数组的大小就是物品个数…

SpringMVC入门

文章目录 一、SpringMVC是什么二、SpringMVC工作流程三、SpringMVC核心组件四、入门案例4.1 添加pom.xml依赖4.2 创建spring-mvc.xml4.3 配置web.xml4.4 SpringMVC配置Web4.5 jsp4.6 静态资源处理 一、SpringMVC是什么 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动…

WorldCoin 运营数据,业务安全分析

WorldCoin 运营数据&#xff0c;业务安全分析 Worldcoin 的白皮书中声明&#xff0c;Worldcoin 旨在构建一个连接全球人类的新型数字经济系统&#xff0c;由 OpenAI 创始人 Sam Altman 于 2020 年发起。通过区块链技术在 Web3 世界中实现更加公平、开放和包容的经济体系&#…

Python小知识 - 【Python】如何使用Pytorch构建机器学习模型

【Python】如何使用Pytorch构建机器学习模型 机器学习是人工智能的一个分支&#xff0c;它的任务是在已有的数据集上学习&#xff0c;最终得到一个能够解决新问题的模型。Pytorch是一个开源的机器学习框架&#xff0c;它可以让我们用更少的代码构建模型&#xff0c;并且可以让模…

JavaScript构造函数

1、构造函数&#xff1a; 是一个函数&#xff0c;是通过new运算符进行调用&#xff0c;生成一个特殊的对象并返回。 function 函数名([参数]){ this.属性名 ‘属性值’ ... this.属性名 function([参数]){ 函数体语句 } } 通常情况下&#xff0c;建议构造函数的首字母大写 …

ModbusCRC16校验 示例代码

作者&#xff1a; Herman Ye Galbot Auromix 测试环境&#xff1a; Ubuntu20.04 更新日期&#xff1a; 2023/08/30 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#xff1a; 本文在更新日期经过测试&#xff0c;确认有效。 笔者出于学习交流目的&#xff0c; 给…

51单片机DHT11温湿度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机DHT11温湿度控制系统仿真设计 1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图元器件清单5. 设计报告6. 设计资料内容清单&下载链接 51单片机DHT11温湿度控制系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图proteus8.9及以上 程序编译器&…

Css 将某div设置为透明,但其子元素不透明

可以使用css中的属性opacity来设置元素的透明度&#xff0c;但它会影响到元素的所有子元素。如果想让父元素透明&#xff0c;但子元素不透明&#xff0c;可以使用另外一种方法&#xff1a; 首先&#xff0c;将父元素的背景颜色设置为rgba格式&#xff0c;其中a表示透明度。例如…

IDEA快捷键

crtlshiftf8 查看所有IDEA debug代码的位置

云备份项目

云备份项目 1. 云备份认识 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。并且能够随时通过浏览器进行查看并且下载&#xff0c;其中下载过程支持断点续传功能&#xff0c;而服务器也会对上传文件进行热点管理&#xff0c;将非热点文件进行压缩存储&…

爬虫项目(二):中国大学排名

《Python网络爬虫入门到实战》京东购买地址&#xff0c;这里讲解了大量的基础知识和实战&#xff0c;由本人编著&#xff1a;https://item.jd.com/14049708.html配套代码仓库地址&#xff1a;https://github.com/sfvsfv/Crawer文章目录 分析第一步&#xff1a;获取源码分析第一…