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

news2024/11/24 7:56:43

无重复字符的最长字串

  • 一、题目
  • 二、解决方法
    • 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.coloradmin.cn/o/1835894.html

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

相关文章

Ardupilot开源代码之ExpressLRS性能实测方法

Ardupilot开源代码之ExpressLRS性能实测方法 1. 源由2. 测试效果3. 测试配置4. 总结5. 参考资料6. 补充 1. 源由 之前一直在讨论ExpressLRS性能的问题,有理论、模拟、实测。 始终缺乏完整的同一次测试的测试数据集,本章节将介绍如何在Ardupilot上进行获…

聆思CSK6大模型+AI交互多模态开源SDK介绍

视觉语音大模型 AI 开发套件( CSK6-MIX )是围绕 CSK6011A 芯片设计的具备丰富语音图像功能与硬件外设的开发板,采用具备丰富组件生态的 Zephyr RTOS作为操作系统,官方提供了十几种开源SDK,包含大模型语音交互、大模型拍照识图、文生图、人脸识…

spark常见问题

写文章只是为了学习总结或者工作内容备忘,不保证及时性和准确性,看到的权当个参考哈! 1. 执行Broadcast大表时,等待超时异常(awaitResult) 现象:org.apache.spark.SparkException: Exception…

设置角色运动的动画

(1) 打开Assets-UnityTechnologies-Animation-Animators,Create-Animation-Controller,命名为JohnLemon (2) 打开JohnLemon,出现下图 (3) 依次将Assets-UnityTechnologies-Animation-Animation中的JohnIdle和JohnWalk拖放到Base Layer窗口中 (4) 右击Idl…

整合JavaSSM框架【超详细】

在整合SSM之前我们首先要知道SSM框架指的是哪些框架? Java的SSM指的是Spring、Spring MVC、MyBatis这三个框架 Spring框架 什么是Spring? Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常…

win11右键小工具

开头要说的 在日常使用场景中,大家如果用的是新的笔记本电脑,应该都是安装的win11系统, 当然win11系统是最被诟病的, 因为有很多人觉得很难操作, 就比如一个小小的解压操作, 在win7和win10上&#xff…

基于DDD的编码实践

分层设计 领域驱动设计(Domain-driven design, DDD) 作为一种复杂软件系统的应对方案,在设计和编码提供了一种新的解决方式,即领域驱动,要求程序员在设计和编码时从领域专家的角度出发来实现架构/代码,做到…

随机产生一些江河上的坐标数据

不久前收到一个需求,说要随机创建约一百个某段江河上的坐标点,用于做一些数据呈现。 我首先是想到用AI直接给我一点数据,没想到给出来的坐标,有许多都落在陆地上,根本不符合我的要求。后来结合AI给出的建议&#xff0…

爬抖音直播间观众数据

打开抖音,稍微看了下买房直播间,突然很好奇是那些用户在观看,想拿下这些用户数据,再通过用户等级、在线观看时长排序,筛选出优质客户。 普及一下抖音用户等级: 抖音用户的提升与用户在直播间消费的金额直接…

打造基于大模型的AI产品

我要飞往印度进行短暂旅行,因此花了一个小时的时间处理在线签证申请流程。完成后,由于我现在知道涉及的内容,我向 ChatGPT 4o 询问了相关问题。这些观点中的大多数都是部分或完全错误的。 NSDT工具推荐: Three.js AI纹理开发包 - …

Linux C编译器从零开发三

AST语法树 BNF抽象 expr equality equality relational ("" relational | "!" relational)* relational add ("<" add | "<" add | ">" add | ">" add)* add mul ("" …

苹果电脑下载vite包错

苹果电脑下载vite包错/Users/lili/.npm/_cacache/index-v5/c5/50/b451703d03b3802b9ee6b7ff2b0bde4de7f26830eb52c904d6911c137cf8包错解决方式 解决方式&#xff1a;sudo chown -R 501:20 "/Users/wangxin/.npm"

2024/6/18(RBAC,查询用户权限,细粒度授权,选课,支付宝生成二维码支付,支付结果查询需要内网穿透)

黑马程序员【学成在线项目】,P141 测试沙箱支付宝_黑马学成在线支付宝沙箱-CSDN博客 需要内网穿透

甘特图如何画以及具体实例详解

甘特图如何画以及具体实例详解 甘特图是一种常见的项目管理工具又称为横道图、条状图(Bar chart)。是每一位项目经理和PMO必须掌握的项目管理工具。甘特图通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。但是多项目经理和PMO虽然考了各种证…

OSPF开销、协议优先级、定时器(华为)

#交换设备 OSPF开销值 如果没有定义OSPF接口的开销值&#xff0c;OSPF会根据该接口的带宽自动计算其开销值。 计算公式&#xff1a; 接口开销 带宽参考值 / 接口带宽 &#xff08;取整数部分&#xff0c;结果小于1时取1&#xff09;通过改变带宽参考值可以间接改变接口的开…

多模态融合算法分析

多模态融合算法分析 多模态论文多模态融合早期融合晚期融合混合融合模型级融合 对比分析早期融合&#xff08;Feature-level Fusion&#xff09;晚期融合&#xff08;Decision-level Fusion&#xff09;混合融合&#xff08;Hybrid Fusion&#xff09;ML-LSTM&#xff08;Multi…

BC153 [NOIP2010]数字统计

数字统计 一.题目描述二.输入描述&#xff1a;三.输出描述&#xff1a;四.数字范围五.题目思路六.代码实现 一.题目描述 请统计某个给定范围[L, R]的所有整数中&#xff0c;数字2出现的次数。 比如给定范围[2, 22]&#xff0c;数字2在数2中出现了1次&#xff0c;在数12中出现1次…

[机器学习算法]线性回归

1. 理解基本概念 在开始学习线性回归之前&#xff0c;确保理解以下基本概念&#xff1a; 自变量&#xff08;特征&#xff09;&#xff1a;用来预测因变量&#xff08;目标&#xff09;的输入变量。 因变量&#xff08;目标&#xff09;&#xff1a;需要预测的输出变量。 回归…

网关助力边缘物联网

网关助力边缘物联网 在探讨网关如何助力边缘物联网&#xff08;IoT&#xff09;的议题时&#xff0c;我们不得不深入分析这一技术交汇点的复杂性与潜力。边缘计算与物联网的融合&#xff0c;通过将数据处理与分析能力推向网络边缘&#xff0c;即数据生成的地方&#xff0c;极大…

自我激励学习提升语言模型的推理能力

随着人工智能技术的快速发展&#xff0c;语言模型&#xff08;LMs&#xff09;在各种下游任务中展现出了卓越的能力。特别是在少样本&#xff08;few-shot&#xff09;和零样本&#xff08;zero-shot&#xff09;学习环境中&#xff0c;通过吸收特定任务的指令和示例&#xff0…