javascript与leetcode——无重复字符的最长子串

山景BP10_128DBG开发板ADC_Key驱动 最近在学习山景BP10_128DBG开发板,想使用开发板上的按键。看了看原理图和之前用过的按键好像有点不一样。常见的按键都是判断IO口是否被拉低或拉高来判断按键是否被按下。山景BP10_128DBG开发板上的按键是ADC按键,每个按键按下之后ADC的采样值是不同的,通过ADC采样回来的值进而判断哪个按键按下。这种方式核心思想就是用一个ADC通道来节约IO口,对于IO紧张的芯片是一个不错的解决思路。 阅读详情

问题描述:
给定一个字符串,找出不含有重复字符的 最长子串 的长度。

示例:

给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。

给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。

给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,“pwke” 是 子序列 而不是子串。

分析:
①必须会的暴力破解法,求无重复字符的最长子串,只需要把所有的子串列出来,找到其中最长的无重复子串即可。
比如对于长度为5的字符串abcda, 我们可以先看看abcda是否为最长无重复字符子串,遍历1遍,if(arr.indexOf(item) !== i) { 说明有重复字符}
再看看长度为4的子串,abcd、bcda…
…
该法缺点:效率极低,运行时间长。
n*n +(n-1)*(n-1)+…+2*2+1*1
O(n^3)
②动态规划法,c[i][j]表示从i到j的串的最长无重复子串
这里写图片描述
如果s[j]不在从i到j-1的子串中,c[i][j]=c[i][j-1]+1;反之,c[i][j]=0

观察上表,可以看出,对角线值一定为1(分析略),每一行可以从对角线处开始遍历,遇到0结束该行遍历

var x=new Array();
  	var len=s.length;
  	var max=0;
  	var sub="";
  	for(let i=0;i<len;i++)
  	{
  		x[i]=new Array();
  	}
  	for(let i=0;i<len;i++)
  	{
  		sub=s[i];
  		for(let j=i;j<len;j++)
  		{
  			if(i==j)
  			{
  				x[i][j]=1;
  			}
  			else
  			{
  				if(sub.indexOf(s[j])==-1)
  				{
  					x[i][j]=x[i][j-1]+1;
  				}
  				else
  				{
  					break;
  				}
  			}
  			max=x[i][j]>max?x[i][j]:max;
  			sub+=s[j];
  		}
  	}
  	return max;

缺点:效率依旧很低。双重循环,时间复杂度O(n^2)
③尺取法
网上看了代码,知道了有尺取法这个东西。
步骤:

  • 初始化两个指针(head,tail)指向字符串开头
  • tail++,如果tail指针指向的字符不与head和tail-1之间的字符重复,tail继续向后移动,更新max;反之,head一直加到没有重复字符为止
  • 重复第二步骤,直到tail指针指向字符串结尾

代码:

 const map = {};
    var left = 0;
    
    return s.split('').reduce((max, v, i) => {
        left = map[v] >= left ? map[v] + 1 : left;
        map[v] = i;
        return Math.max(max, i - left + 1);
    }, 0);

这串简短的代码就像女神一样优雅美丽。
(这段js涉及split函数、reduce函数、箭头函数等内容,请自行了解)
这里写图片描述
翻译成大白话就是:

	const map={};
    var left=0;
    var max=0;
    var left=0;
    for(var i=0;i<s.length;i++)
    {
    	var v=s[i];
    	if(map[v]>=left)//一开始map[v]不存在,undefined,式子值为false
    	{
    		left=map[v]+1;
    	}
    	map[v]=i;
    	if(max<i-left+1)
    	{
    		max=i-left+1;
    	}
    }
    return max;

说一下对尺取法的理解吧
目标:最长的无重复子串
这里写图片描述
当出现上述情况时候,在当前子串范围内max=6,该子串的子串max一定小于6
接下来无论head向右如何移动(head<=tail),所能得到的子串(如cdabsa、dabsa)的最大无重复字符长度len一定是小于6的,故对它们进行计算是没有意义的,该部分的max已经找到,直接将head指针移到b字符处,计算下部分的max
这里写图片描述
时间复杂度: 只遍历一遍,O(n)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) [ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。 阅读详情

相关推荐

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9679

【无重复字符的最长子串--三种方法】

大家好,今天我们来讨论一下LeetCode上关于数组方面的一个题目:无重复字符的最长子串。题目不难,方法很多。熊猫希望通过这一道简单的题目来使大家了解到不同的解题方法。LeetCode03以上就是今天讲解的无重复字符串的全部内容,题目不难,也不难讲。不过这些解题方法却很重要。的支持。

m0_熊猫馆主的博客 1万+

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2668

无重复字符的最长子串

无重复字符的最长子串

weixin_42029738的博客 1万+

AHRS互补滤波(Mahony)算法及开源代码

AHRS(Attitude and heading ref AHRS(Attitude and heading reference system,也就是航姿参考系统。在互补滤波算法中传感器主要采用了IMU(陀螺仪、加速度计)和磁力计。 AHRS的基本思想是,在载体没有平移运动的情况下,通过加速度感知重力分量,可以计算出载体的俯仰(Pitch)和横滚(Pitch);磁力计可以感知磁北方向,因此可以计算载体的磁北航向;而陀螺仪测量输出载体的旋转角速度,通过积分可以计算得到横滚、俯仰、航向增量,但由于陀螺输出值含

weixin_42918498的博客 3万+

WSL2双显卡配置实战:避开Tesla与TCC模式的那些坑

本文针对WSL2环境下无法识别Tesla计算卡的问题进行深度解析。核心原因在于WSL2目前仅支持WDDM模式的显卡,而Tesla系列及运行在TCC模式下的显卡因采用纯计算架构而无法兼容。文章提供了详细的排查步骤,并给出了包括调整显卡用途、使用虚拟机或物理机在内的多种实用解决方案,帮助开发者避开配置陷阱。

weixin_29289821的博客 539

【子串】3. 无重复的最长子串

力扣刷题;子串问题;

Smileyan's blog 1万+

[Github]GitHub 2FA快速安全配置全攻略

GitHub强制要求用户启用双重身份验证(2FA)以提升代码安全。本文详细介绍了2FA的三种实现方式:TOTP应用验证(推荐)、SMS短信验证(备用)和硬件安全密钥(最安全),并提供了配置指南。特别推荐使用在线工具2FA.run快速测试TOTP功能。文章还涵盖恢复代码管理、企业级2FA策略制定以及常见问题解决方案,如时间同步问题、多设备同步等。通过强制2FA、定期审计和建立安全事件响应流程,开发者可构建更安全的代码管理体系。

冰茶的博客 2620

LeetCode 算法:无重复字符的最长子串c++

LeetCode 算法:无重复字符的最长子串c++

世界那么大,我想去看看~【随心更新,看世界去了😄】 1638

复现基于混频因子模型的GDP即时预测方法

基于混频因子模型的GDP即时预测方法复现 本文复现了混频因子模型(MIDAS)在GDP即时预测中的应用。该方法整合7个月度宏观经济变量(工业增加值、CPI、PMI等)与季度GDP数据,通过状态空间模型实现高频预测。技术实现包括:1)使用PCA提取潜在共同因子;2)构建状态空间模型处理混频数据;3)通过卡尔曼滤波进行参数估计。实证结果显示模型预测效果良好(测试集R²=0.82),其中工业增加值对因子1贡献最大(0.82),CPI对因子2贡献显著(0.78)。该方法为决策者提供了更及时的季度GDP估算。

huanghm88的专栏 601

【人工智能时代】-什么是MCP?本地如何开发MCP Server

MCP(Model Context Protocol)全称模型上下文协议,是由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。掌握更多的信息控制更多的工具在没有联网搜索之前,大模型的数据来源只有训练数据的时候以及推理我们告诉他的东西。所以后来的rag、知识库都是让AI掌握更多的信息,而MCP的出现是为了让大模型控制更多的工具,赋予更多能力。在本篇文章中,基于 Python 完成了一个简单的 MCP Server 的开发。

xiaoli8748的专栏 1990

LeetCode—— 3. 无重复字符的最长子串.(JS)

题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长...

zhang1339435196的博客 1934

Xilinx FPGA平台DDR3设计保姆式教程(1)DDR3基础简介

xilinx平台DDR3设计(1)DDR3简介 如果我们只是拿来用ddr搬砖,那么它就简单,知道IP怎么使用就好,但是要想知其所以然,理论知识是必备的,这也是我们初学者所欠缺的东西,慢慢修炼吧! 目录 一、DDR3简介 二、地址的概念及容量计算 三、重要给概念理解 3.2 列地址脉冲选通潜伏期 3.4 掩码 四、参考资料 一、DDR3简介 DDR3全称double-data-rate 3 synchronous dynamic RAM,即第三代双倍速率同步动态随机存储器。...

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

LeetCode3.无重复字符的最长子串JavaScript

LeetCode3.无重复字符的最长子串JavaScript 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwke...

weixin_40659167的博客 256

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

无重复字符的最长子串 leetCode js实现

无重复字符的最长子串 leetCode js实现 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。点这做题 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3

weixin_39260192的博客 164

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

力扣3.无重复字符的最长子串(JS)

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

m0_73788073的博客 323

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode-无重复字符的最长子串 -js实现

leetcode-无重复字符的最长子串 -js实现 解题思路 1、创建一个set 2、2个指针i和j,初始都指向字符串的开头,i随着for循环遍历 3、如果set里面没有s[i],说明目前为止还没有重复的字符串,把s[i]添加到set里面,然后更新最大不重复自妇产的数量 4.如果set里面有s[i],则从set里开始删除s[j],并且递增j,再检查set里是否是s[i],如此反复知道set里面没有重复的s[i]为止 5.重复步骤3和4,直到遍历完整个字符串 var lengt

douxiuchou4277的博客 226

力扣中等题-无重复字符的最长子串(JS)

请你找出其中不含有重复字符的。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。思路:滑动窗口法+哈希表。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。

qq_59931938的博客 208

js实现 无重复字符的最长子串--力扣--3

目录 1 题目 2 输入输出 3 解法—滑动窗口 4 代码 1 题目 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 2 输入输出 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出...

bailizx 873

【JavaScript】Leetcode 3.无重复字符的最长子串

题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长...

咸鱼日常 325

leetCode3.无重复字符的最长子串(JavaScript)

leetCode每日一题3.无重复字符的最长子串 难度中等 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

m0_43391490的博客 737

leetcode 3. 无重复字符的最长子串(JavaScript实现)

leetcode 3. 无重复字符的最长子串问题描述代码 问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子

ryyzxf的博客 155

leetCode编程题之3. 无重复字符的最长子串(javaScript)

leetCode编程题之3. 无重复字符的最长子串(javaScript)

qq_31207499的博客 166

力扣(LeetCode):#3-无重复字符的最长子串

文章目录力扣(LeetCode):#3-无重复字符的最长子串题目描述:题解:方法一:滑动窗口 力扣(LeetCode):#3-无重复字符的最长子串 题目描述: 题解: 方法一:滑动窗口 C++ class Solution { public: int lengthOfLongestSubstring(string s) { // 哈希集合,记录每个字符是否出现过 unordered_set<char> occ; int n = s.s

忘尘丶莫负的博客 371

leetcode 3. 无重复字符的最长子串 (js)

定义了左、右两个指针以及map对象的唯一性,遍历字符串,判断每次遍历的item是否在map中出现,但是前提是对应的map的value值是要大于左指针的。若出现过,则更新左指针的值以及maxlength.定义了左右指针和set数组,与解法1思想类似,但是少去了value值于左指针的判断。是解法2的优化版,省去了一些重复循环的清空比如说pwwkew。,请你找出其中不含有重复字符的。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为3。,所以其长度为3。

m0_74267584的博客 426
上一篇: 前端面试题目整理——实现平衡二叉树AVL
下一篇: http请求报文和响应报文之常见请求头及其作用
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值