每天一道算法题(八)——找出字符串中无重复字符的最长子串

文章目录

  • 1、问题
  • 2、示例
  • 3、解决方法
    • (1)方法1——双指针
  • 总结


1、问题

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

2、示例

示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

3、解决方法

(1)方法1——双指针

let s = "abcabcbb";
let lengthOfLongestSubstring = function(s) {// 1: 如果字符串的长度小于等于1,返回当前字符串的长度(0/1)if(s.length <= 1) return s.length// 2-1: 定义左右指针,最大值// 和之前双指针不同的在于,当前题目需要依此对比,也就是n开始,和n+1...开始对比// 2-2: 定义一个切割字符串后的变量let temp;let max = 0, left = 0, right = 1; // 3: 左指针固定,右指针小于字符串长度继续遍历while(right < s.length){// 4: 获取根据左右指针切割的字符串temp = s.slice(left, right);// 5-0: 判断切割后的字符串是否存在 当前右指针下标的字符串// charAt 判断字符串中是否有给定索引(right)的字符串if(temp.indexOf(s.charAt(right)) > -1){// 5-1: 如果切割后的字符串中有当前右指针索引的下标值,左指针自增并结束循环(需求是返回不重复的字符串)left++continue;} else {// 5-2: 如果切割的字符串没有右指针,右指针自增(需求:最长的不重复数据)right++}// 6: 如果右指针 - 左指针 大于 返回最大长度,就把左右指针相减的值给maxif(right - left > max) {max = right - left;}}// 7:输出最大不重复长度console.log('最大连续子串长度', max);
};
lengthOfLongestSubstring(s);

总结

难度: 中等
区别:之前的双指针是从左右两端开始的,当前是由0,1开始的,找到规律。
其他:当你了解上面代码后,你可以看看每天一道算法题(九)——寻找字符串中所有字母异位词的子串这题,和当前这题的思路一样。

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

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

相关文章

c++ new新建对象原因

在C中&#xff0c;使用new和不使用*来创建对象的主要区别在于内存分配的位置和对象的控制性。具体来说&#xff1a; 使用new会在堆上分配内存&#xff0c;而不使用的new&#xff08;即直接创建对象&#xff09;则在栈上分配内存。 堆内存的分配是动态的&#xff0c;这意味着我…

【Rust】快速教程——闭包与生命周期

前言 你怎么向天生的瞎子说清颜色&#xff1f;怎么用手势向天生的聋子描述声音&#xff1f; 鲜花就在眼前&#xff0c;雷鸣就在头顶&#xff0c;对他们来说却都毫无意义 眼睛看不到&#xff0c;鼻子可以嗅闻花香&#xff0c;耳朵听不见&#xff0c;手指可以触碰窗纸的震动。 犯…

STM32:时钟树原理概要

在一般情况下只要在CubeIDE中将RCC下的高速时钟源设置成晶振&#xff0c;随后在时钟配置中把HCLK设置到最大频率&#xff08;比如STM32F103的最高频率是72MHZ &#xff09;&#xff0c;CubeIDE就会帮我们自动调节其它参数到合适的值。这样我们芯片就可以全速运行了。 一、时钟信…

django+drf+vue 简单系统搭建 (3) - 基于类的视图

传统Django中有基于类的视图&#xff0c;Drf中自然也有&#xff0c;目的都是实现功能的模块化继承&#xff0c;封装&#xff0c;减少重复代码。 首先在视图中新增下面代码&#xff1a; # simpletool/views.pyfrom rest_framework.views import APIView from simpletool.seria…

Java —— String类

目录 1. String类的重要性 2. 常用方法 2.1 字符串构造 2.2 String对象的比较 2.3 字符串查找 2.4 转化 1. 数值和字符串转化 2. 大小写转换 3. 字符串转数组 4. 格式化 2.5 字符串替换 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串常量池 2.9.1 创建对象的思考…

django DRF认证组件

一、学习DRF的认证类&#xff1b; 设计&#xff1a;LoginView不登录就可以访问&#xff0c;UserView和OrderView需要通过认证后才能访问&#xff1b; 1、urls.py urlpatterns [path(login/, views.LoginView.as_view()),path(user/, views.UserView.as_view()),path(order/,…

【数据库设计和SQL基础语法】--数据库设计基础--数据建模与ER图

一、数据建模的基本概念 1.1. 数据模型的概念 数据模型是对现实世界中事物及其之间关系的一种抽象表示。它提供了描述数据结构、数据操作、数据约束等的方式&#xff0c;是数据库设计的基础。数据模型帮助我们理解数据之间的关系&#xff0c;提供了一种规范化的方式来组织和存…

C#编程题分享(2)

输出所有整数的和 让⽤户输⼊整数&#xff0c;如果⽤户输⼊的不是0&#xff0c;就继续输⼊&#xff0c;如果输⼊的是0&#xff0c;结束整数&#xff0c;并输出所有整数的和。 Console.WriteLine("请输⼊⼀个整数&#xff1a;"); int n; int sum 0; do {n Convert…

selenium下载安装对应的chromedriver并执行

文章目录 selenium对应版本chrome驱动下载114以及之前的chrome版本119/120/121的chrome版本 chromedriver安装执行selenium代码 selenium Selenium是广泛使用的模拟浏览器运行的库&#xff0c;它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中&#xff0c…

Redis 5 种基本数据类型详解

Redis 共有 5 种基本数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 这 5 种数据类型是直接提供给用户使用的&…

VPX 插座(VITA46)介绍及应用 (简单介绍)

1. VPX 插座的介绍 VPX是VITA(VME International Trade Association, VME国际贸易协会)组织于2007年在其VME总线基础上提出的新一代高速串行总线标准。VPX总线的基本规范、机械结构和总线信号等具体内容均在ANSI/VITA46系列技术规范中定义。VPX就是基于高速串行总线的新一代总线…

PyTorch中并行训练的几种方式

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

springcloud alibaba学习视频

阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台

算数练习——模拟

卡罗尔正在学习分数除法&#xff0c;但是她在判断答案是否正确方面有困难。请你帮她找出正确的答案。 输入 一行包含三个正整数 A ,B 和 K :表示要输出的分子&#xff0c;分母和小数位数。 保证 1 < A < B <103,1 < K <103. 输出 输出一行包含小数点后 K 位的…

小诺2.0开源版工程启动

小诺是一款开源的前后端开发框架&#xff0c;同若依、SpringBladex一样可作为私活、外包脚手架。 开源地址&#xff1a;Snowy: 最新&#xff1a;&#x1f496;国内首个国密前后分离快速开发平台&#x1f496;&#xff0c;采用Vue3AntDesignVue3 ViteSpringBootMpHuToolSaToke…

操作系统(三)| 进程管理上 进程状态 同步 互斥

目录 1 进程和程序区别 2 进程状态 2.1 进程的5种基本状态 2.2 进程状态之间转换 2.3 七状态模型 3 进程描述 3.1 进程控制块 PCB 3.2 进程块组织方式 4 进程控制 5 进程同步 互斥 5.1 区分进程互斥和同步 5.2 核心方案 5.3 其他方案 方案1 设置锁变量 方案2 严…

DispatcherSynchronizationContext and Dispatcher

https://www.cnblogs.com/liangouyang/archive/2008/11/20/1337907.html SynchronizationContext提供一个自由线程的同步上下文&#xff0c;一个常用的用法是把UI线程的同步上下文保存起来&#xff0c;传给另一个线程&#xff0c;因为UI只能再UI线程中操作&#xff0c;在另外一…

C# 电脑程序控制电路开关

最近在做系统的监控&#xff0c;想到能不能做一个酷点的功能&#xff0c;当收到异常消息时桌面上的红色小灯&#xff08;或报警灯&#xff09;会亮起来。于是在淘宝上找了一下&#xff0c;有这种小设备&#xff0c;插入USB设备&#xff0c;通过串口控制这个设备的继电器来实现&…

中级程序员——vue3+js+git面试题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;vue3jsgit面试题 文章目录 vue3最大缺点和优点&#xff1f;vue3组合式里面&#xff0c;如何去调用子组件里面的方法&#xff1f;watch和watcheffect有什么区别&#xff1f;计算属性和watch的区别是什…

MySQL数据库系统教程

基础篇 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用…