LeetCode-无重复字符的最长子串(3)

题目描述:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
在这里插入图片描述
代码:

class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> occ=new HashSet<Character>();int len=s.length();int rk=0,ans=0;for(int i=0;i<len;i++) {if(i!=0) {occ.remove(s.charAt(i-1));}while(rk<len && !occ.contains(s.charAt(rk))) {occ.add(s.charAt(rk));rk++;}ans=Math.max(ans,rk-i);}return ans;}}

思路: 这题看到一般会想到使用双层循环,一层顺序遍历字符串字符,一层遍历每个字符开头的不重复子串,但是这样显然会超时。思考了挺久看了官方题解,算是学到了一种方法。题解中的思路就是首先通过一个for循环从字符串的每个字符开始记录不重复子串,这里的记录不重复子串也就是在每层循环里再套一个while循环来遍历每个起始字符后的字符直至出现重复。那么为什么这里明明有两层循环,方法却不超时,这就是官方题解的巧妙之处。在理解这个巧妙点之前必须先知道一个思想,这里直接贴官方题解的截图。
在这里插入图片描述

通过上图我们知道,起始字符后的不重复字符下一个起始字符不需要处理,因为前一个起始字符后的不重复字符对于下一个起始字符来说肯定也是不重复的,这样就减少了很多次运行从而避免超时。
代码中是定义了记录不重复子串尾部位置的rk,通过rk与i的关系可以计算出子串长度,每次while循环后都进行比较。
为了实现上述操作,因此在每次的for循环在集合中删除前一个起始字符,并且通过rk的指向将不重复子串的字符加入集合,对于下一个起始字符可以直接接着rk的指向添加字符。

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

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

相关文章

解决Element-Plus中el-switch的change方法自动触发问题

下面el-switch代码片段是在el-table里使用 <el-switch v-else-if"col.prop status" v-model"scope.row.status" :active-value"0" :inactive-value"1" :before-change"beforeStatus" change"changStatus(scope.r…

Yolov5/8的小程序部署前后端实现

Yolov5/8的小程序部署前后端实现 导语本机配置硬件环境配置 前端实现后端实现总结参考文献 导语 毕设的题目与Yolo系列的图像识别相关&#xff0c;通过搜查了很多资料和实践最后完成&#xff0c;看到某些平台上居然卖300&#xff0c;觉得很离谱&#xff0c;所以决定把代码开源…

Springcloud alibab和dubbo有什么区别?

Spring Cloud Alibaba 和 Dubbo 都是为了简化企业级应用开发而生的框架&#xff0c;尤其是在分布式系统和微服务架构的背景下。 虽然他们在某些功能上有重叠&#xff0c;但各有侧重点和使用场景。 微服务架构图 首先介绍一下 Spring Cloud Alibaba&#xff1a; Spring Cloud …

C++自制小游戏《屠夫躲猫猫》

大家好&#xff0c;我是派蒙&#xff0c;我写了一个《屠夫躲猫猫》的游戏&#xff0c;下面是源代码&#xff1a; #include <stdio.h> #include <conio.h> #include<bits/stdc.h> #include<windows.h> using namespace std; string ID[1001]; string N…

Fiddler抓取https原理?

首先fiddler截获客户端浏览器发送给服务器的https请求&#xff0c; 此时还未建立握手。 第一步&#xff0c; fiddler向服务器发送请求进行握手&#xff0c; 获取到服务器的CA证书&#xff0c; 用根证书公钥进行解密&#xff0c; 验证服务器数据签名&#xff0c; 获取到服务器C…

数据结构学习 jz34 二叉树中和为某一值的路径

关键词&#xff1a;回溯 二叉树 前序遍历 路径记录 因为我没有仔细接触过二叉树的遍历过程&#xff0c;所以我是懵懵懂懂按照dfs的方法写的。没想到写对了&#xff0c;看了解答发现这叫做二叉树的前序遍历。用时29min。 这让我明白了前序遍历和dfs原来是有相同之处的。&#…

Local server not started, start with 报错python -m weditor

一、python -m weditor 如图报错 Local server not started, start with 报错 二、解决方案 右上角选择新的无痕窗口下&#xff0c;然后打开 http://localhost:17310/ 即可

2401C++,无栈协程核心概念

无栈协程本质是个可多次执行的状态机.一般使用协程的标准流程是,生成一个状态机,返回状态机的(协柄)句柄,通过控制该句柄,不断反复执行(恢复). 执行过程中,该状态机作用是:不停产生数据并写到某个地方.所以c20协程提供了协产和协中,同时,每个协程都应有个实现了产生值或中值函…

OBJECT 划分

5、Object 划分 1.PO(persistant object) 持久对象 PO 就是对应数据库中某个表中的一条记录&#xff0c;多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。 2.DO&#xff08;Domain Object&#xff09;领域对象 就是从现实世界中抽象出来的有形或无形的业务实体…

React与Vue性能对比:两大前端框架的性能

React和Vue是当今最流行的两个前端框架&#xff0c;它们在性能方面都有着出色的表现。 React的加载速度&#xff1a; 初次加载&#xff1a;由于React使用了虚拟DOM&#xff08;Virtual DOM&#xff09;技术&#xff0c;它可以通过比较虚拟DOM树与实际DOM树的差异来进行高效的…

PCIe 6.0生态业内进展分析总结-2

3.PCIe 6.0协议分析仪 (1)Keysight Keysight是德科技在2023年6月份对外宣布&#xff0c;第一款支持PCIe 6.0协议验证调试工具。 Keysight PCIe 6.0架构解决方案具备以下特点&#xff1a; 分析PCIe 6.0技术设计的数据链路/事务层 支持所有PCIe技术速率——从2.5 GT/s至64 GT/…

实验笔记之——基于COLMAP的Instant-NGP与3D Gaussian Splatting的对比

之前博客进行了COLMAP在服务器下的测试 实验笔记之——Linux实现COLMAP-CSDN博客文章浏览阅读794次&#xff0c;点赞24次&#xff0c;收藏6次。学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客NeRF 所做的任务是 Novel View Synthesis&#xf…

《PySpark大数据分析实战》-25.数据可视化图表Matplotlib介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

2024-01-04 用llama.cpp部署本地llama2-7b大模型

点击 <C 语言编程核心突破> 快速C语言入门 用llama.cpp部署本地llama2-7b大模型 前言一、下载llama.cpp以及llama2-7B模型文件二、具体调用总结 使用协议: License to use Creative Commons Zero - CC0 该图片个人及商用免费&#xff0c;无需显示归属&#xff0c;但如果…

阿里通义千问「全民舞王」,一张照片就能跳《科目三》,刷爆朋友圈

这两天看朋友圈、网上都在发这种跳舞的视频。只要上传一张全身照&#xff0c;就可以生成各种跳舞的视频。 比如前段时间火爆海底捞的《科目三》&#xff0c;还有《DJ慢摇》、《鬼步舞》、《兔子舞》、甚至还有咱《秧歌舞》。 先来一睹为快&#xff01; 阿里通义千问「全民舞王…

虚拟机(克隆)导入/导出镜像(OVAOVF)

一.了解虚拟化和 UEFI 虚拟化是一种技术&#xff0c;通过在物理硬件上创建虚拟的计算环境&#xff0c;使得多个操作系统和应用程序可以在同一台计算机上同时运行。虚拟机是在这个虚拟化环境中运行的实例&#xff0c;它们需要被赋予操作系统和固件等系统软件来进行运行。UEFI&a…

Spring学习之——注入DI(Dependence Injection)

注入DI&#xff08;Dependence Injection&#xff09; 概念&#xff08;什么是注入&#xff09; DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;在Spring创建对象的同时&#xff0c;为其属性赋值&#xff0c;称之为依赖注入。 注入方式一&#xff1a;…

Python+selenium+chromedriver实现爬虫示例代码

下载好所需程序 1.Selenium简介 Selenium是一个用于Web应用程序测试的工具&#xff0c;直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 2.Selenium安装 方法一&#xff1a;在Windows命令行&#xff08;cmd&#xff09;输入pip install selenium即可自动安装&am…

炫酷的倒计时引导页

文章目录 文件分布介绍效果预览代码css样式Locationplayer.css js样式player.js 文件分布介绍 效果预览 代码 css样式 Location html {height: 100%;}body {font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hirag…

利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式

举个例子吧,目前的业务需要把取到的数据,进行分组,然后好用另一个方法进行数据处理。 然后,就以下面的为例子,将取到的list集合,将取到的数据以性别分组,以性别为K,以性别数量为v,。 代码示例: package Lx;import java.util.ArrayList; import java.util.List; imp…