【无重复字符的最长子串】

无重复字符的最长字串

  • 一、题目
  • 二、解决方法
    • 1.暴力解法
    • 2.滑动窗口+哈希
  • 三、总结
    • 1.es6 new set()的用法
      • 添加元素add()
      • 删除元素delete()
      • 判断元素是否存在has
    • 2.滑动窗口和双指针的联系和特点

一、题目

在这里插入图片描述

二、解决方法

1.暴力解法

在这里插入图片描述
解题思路:使用两层循环逐个生成子字符串,再利用es6 new set()去重判断是否有重复字符,若无则比较最大值和不重复字符串长度的大小重新给max_length赋值
在这里插入图片描述

2.滑动窗口+哈希

在这里插入图片描述

在这里插入图片描述
解题步骤和思路:
初始化一个空集合 subSet,用于存储当前窗口中的字符。
初始化右指针 r 为 0,表示窗口的右边界初始位置。
初始化 max_length 为 0,用于记录最长子串的长度。
使用一个循环来移动左指针 i,从 0 到 s.length - 1。
如果 i 不等于 0,说明左指针已经移动过,需要从 subSet 中移除上一个窗口的左边界字符 s.charAt(i-1)。
使用一个内部循环来移动右指针 r,从当前位置开始向右移动,直到 r 达到字符串的末尾或者遇到了一个在 subSet 中已经存在的字符。
在内部循环中,每次移动右指针之前,检查 s.charAt® 是否已经在 subSet 中。如果不在,就将它添加到 subSet 中,并更新 max_length 为当前窗口大小 r - i 和 max_length 中的较大值。
当左指针 i 完成遍历后,max_length 就是最长的不含有重复字符的子串的长度。

这个算法的时间复杂度是 O(n),其中 n 是字符串 s 的长度。尽管有两个嵌套循环,但是每个字符最多被访问两次(一次由左指针 i 引起,一次由右指针 r 引起),因此整体时间复杂度是线性的。

三、总结

1.es6 new set()的用法

常用于数组去重、用于字符串去重、实现并集、交集、和差集

添加元素add()

删除元素delete()

判断元素是否存在has

……其他用法具体可见http://t.csdnimg.cn/WrM6i

在JavaScript中,Set 是一种集合数据结构,它存储唯一值,并允许快速检查一个值是否在集合中。这种特性使得 Set 非常适合用作哈希集合,用于记录字符是否出现过。

Set 在内部使用哈希表来实现,这提供了一种非常高效的方式来添加、删除和检查元素是否存在。在处理字符串问题时,比如查找无重复字符的最长子串,使用 Set 可以快速判断一个字符是否已经在当前的子串窗口中出现过。

2.滑动窗口和双指针的联系和特点

在这里插入图片描述

滑动窗口通常用于解决子数组或子字符串相关的问题,它涉及到一个窗口的左右边界(指针),这个窗口可以在数组或字符串上滑动。滑动窗口的大小可以固定也可以动态变化。

滑动窗口的使用特点:

适用于寻找连续的子数组或子字符串。
窗口的左右边界随着算法的执行而移动。
通常用于需要维护窗口内元素状态的问题。
可以用来解决最大最小问题,如最长子串、最小覆盖子串等。
双指针: 双指针是一种更通用的技术,它可以用于解决多种数组或字符串问题。双指针可以是同向移动、相向移动或背向移动,具体取决于问题的性质。

双指针的使用特点:

适用于配对问题,如两数之和、三数之和等。
可以用于排序数组,快速定位满足条件的元素对。
在某些情况下,双指针可以用来替代滑动窗口,如寻找最长子串时。
双指针可以用于链表问题,如检测循环、找到中间点等。

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

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

相关文章

VMware软件的安装与安装Win10系统

上一篇写了(虚拟机)VMware软件的安装及Ubuntu系统安装,这次续上部分,安装完Ubuntu系统后,又安装了win10,也记录一下。 事前准备好win10镜像文件,可在微软官网下载 入口地址:软件下…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块,从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时,表示当前实例对象是同步锁。这意味…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环,开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展! 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片,更令人惊喜的是,团队选…

【windows|002】WEB服务和域名介绍

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

【算法与设计】期末总结

文章目录 第一章 概述算法与程序时间复杂性求上界 第二章 递归与分治双递归函数——Ackerman函数分治策略大整数乘法两位两位四位x四位 三位x三位两位x六位 第三章 动态规划矩阵连乘基本要素最优子结构子问题重叠 备忘录 第四章 贪心算法活动安排问题基本要素贪心选择性质最优子…

pg表空间和mysql表空间的区别

一、表空间的定义 1、在pg中表空间实际上是为表指定一个存储的目录。并且在创建数据库时可以为数据库指定默认的表空间。创建表和索引时可以指定表空间,这样表和索引就可以存储到表空间对应的目录下了。 在pg中一个库中可以有多个表空间,一个表空间可以…

6月17(信息差)

1.马斯克最新预测:未来不再需要手机 将被脑机芯片替代 当地时间6月17日,马斯克高仿号“Not Elon Musk”发帖称:“你会在你的大脑上安装一个Neuralink接口,让你通过思考来控制你的新X手机吗?”对此,马斯克本…

yolov10--C#接口

一、前言 本章主要讲解yolov10的C#接口,主要是使用微软开发的openvinocsharp工具加载yolov10模型,并做推理。 二、yolov10模型转换 这里为了演示,使用官方yolov10m模型(其他大小的模型同理)做演示,可从下方…

游戏服务器研究一:bigworld 开源代码的编译与运行

1. 前言 bigworld 已经开源了它的代码,而我对于大世界的 scale 很感兴趣,所以就尝试把代码跑起来研究。但是,整个过程比我原先预想的复杂得多。 虽然能找到一些官方的帮助文档,但这些文档要么过旧,要么过于详尽&…

【护眼知识】护眼台灯真的有用吗?带你看台灯怎么选对眼睛好

在数字化时代,我们的眼睛无疑承受着前所未有的压力。无论是长时间盯着电脑屏幕,还是沉浸在书本的海洋中,眼睛的健康都成为了我们不容忽视的问题。中国现有约500万盲人,占总人口的0.4%,是世界上盲和视力损伤严重的国家之…

浏览器加速播放视频技巧

当我们看网页中的视频时,想加速播放,但是选项最高只能2倍速时,还想再加快播放如何操作? 此时我们可以按F12打开浏览器开发者选项,然后点击控制台,在浏览器输入如下代码: document.querySelecto…

月薪没到20K,必啃的WebGIS系统技术栈,你练到哪一步了?

WebGIS(网络地理信息系统)是目前地理信息系统(GIS)开发的主流,它利用互联网技术来发布、共享和交互地理空间数据。 一个完整的WebGIS项目通常涉及以下几个主要环节:具备一定的理论知识,数据生产…

MAGs培养有线索了?宏组学中未培养微生物表型与培养条件预测

宏基因组测序技术让人们对地球上微生物的多样性有了更深入的了解,但分离培养是研究微生物的生理代谢功能并解析其生态作用的关键。2023年11月的世界微生物数据中心(WDCM)年会中,全面启动了全球“未培养微生物培养组”计划&#xf…

毕业回家寄大量衣服裤子省钱技巧分享

很多宝子们问我,怎么寄快递更加便宜划算,特别是当你有很多的衣服裤子这类型的衣物的时候,怎么寄件最便宜。 今天分享几个寄快递的省钱方法以及经验分享。 1、惠发快递 像寄包裹快递,可以找快递平台进行下单,这样会更…

【机器学习300问】124、什么是LSTM?LSTM的基本结构是怎样的?

长短期记忆网络(LSTM)是一种解决隐变量模型长期信息保存和短期输入缺失问题的方法,有趣的是,长短期记忆网络的设计比门控循环单元稍微复杂一些, 却比门控循环单元早诞生了近20年。 一、什么是LSTM? LSMT全…

M41T00串行实时时钟-国产兼容RS4C1339

RS4C1340是一种实时时钟(RTC)/日历,与ST M41T00引脚兼容,功能等效,包括软件时钟校准。该器件还提供VBAT引脚上的涓流充电能力、较低的计时电压和振荡器STOP标志。寄存器映射的块访问与ST设备相同。涓流充电器和标志需要…

vue+springboot导入Excel表格

1.创建一个excel表格,与数据库需要的表头对应 2.(前端)导入excel的按钮 <template class"importExcel"><el-button type"primary" click"chooseFile">导入<i class"el-icon-upload el-icon--right"></i><…

短路是怎么形成的

1. 短路分为电源短路和用电器短路。 电源短路&#xff1a;电流不经过任何用电器&#xff0c;直接由正极经过导线流向负极&#xff0c;由于电源内阻很小&#xff0c;导致短路电流很大&#xff0c;特别容易烧坏电源。 用电器短路&#xff1a;也叫部分电路短路&#xff0c;即一根…

利用AI云防护实现高效负载均衡

在当今高度数字化的世界里&#xff0c;保证网站和应用的高可用性和响应速度对企业的业务连续性和用户体验至关重要。传统的负载均衡技术虽然能够分发流量&#xff0c;但在面对突发流量、DDoS攻击或资源动态调整时往往力不从心。本文将探讨如何借助AI云防护服务&#xff0c;不仅…

搭贝低代码开发平台:高效、灵活、经济的软件开发解决方案

在当今快速发展的数字化时代&#xff0c;企业对于快速、灵活且成本效益高的软件开发需求日益增长。搭贝低代码开发平台以其强大的功能和用户友好的体验&#xff0c;正在成为众多企业&#xff0c;特别是中小企业&#xff0c;软件开发的首选工具。 &#x1f4c8; 什么是低代码开发…