LeetCode[中等] 3. 无重复字符的最长子串

news2024/9/19 18:27:51

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

思路:滑动窗口,设置左右指针left与right,maxLength存储长度

利用HashSet性质,存储滑动窗口中的字符

如果没有重复的,那么right继续向右滑动,并将该字符添加进HashSet中;如果重复了,left向右滑动,并不断将字符移出数组。

完成一次判断之后,更新最长字串长度

public class Solution {
    public int LengthOfLongestSubstring(string s) {
        HashSet<char> set = new HashSet<char>();
        int left = 0, right = 0, maxLength = 0;
        int length = s.Length;
        while(right < length)
        {
            if(!set.Contains(s[right]))
            {
                set.Add(s[right]);
                right++;
            }
            else
            {
                set.Remove(s[left]);
                left++;
            }
            maxLength = Math.Max(maxLength, right - left);
        }
        return maxLength;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串 s 的长度。滑动窗口的左右端点最多各遍历字符串 s 一次。

  • 空间复杂度:O(∣Σ∣),其中 Σ 是字符集。空间复杂度主要取决于哈希集合,哈希集合中每个字符最多出现一次。

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

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

相关文章

5.基础漏洞——文件上传漏洞

目录 一.文件上传漏洞原理 二.文件上传漏洞条件&#xff1a; 三.上传限制手段分为两大类 (1)客户端校验 (2)服务端校验 四.具体实现 1.文件上传漏洞——绕过JS检测 2.文件上传漏洞——绕过MIME类型检测 3.文件上传漏洞——绕过黑名单检测 绕过方式:(1) 绕过方式:(2) …

yum本地源配置

yum本地源配置 1.打开虚拟机&#xff0c;点击设置。 2.选择CD/DVD&#xff0c;选择系统镜像文件&#xff0c;设备状态选择“连接”。 3.使用命令lsblk&#xff0c;查看磁盘空间&#xff0c;发现镜像文件。 4.在/dev下找到sr0镜像文件: ls /dev 5.挂载镜像文件&#xf…

闯关leetcode——27. Remove Element

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/remove-element/description/ 内容 Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then retur…

有关C# .NET Core 过滤器的使用

想用一个过滤器实现特定接口的审核日志记录&#xff0c;结果报了错&#xff0c;看了看感觉有些基础要补&#xff0c;所以想记录下来 错误&#xff1a; 在属性过滤器中使用了依赖注入&#xff0c;结果在应用在控制层接口时报了传参的错 //过滤器 public class AuditRecordFil…

C#语言依然是主流的编程语言之一,不容置疑

C#语言是由微软在2000年发布的现代面向对象编程语言。尽管在编程语言市场中的占有率相对较低&#xff0c;但C#依然保持了强大的存在感&#xff0c;并未像一些其他语言那样逐渐被淘汰。C#语言不仅有其存在的独特理由&#xff0c;而且拥有许多令人无法忽视的优势。以下从多个方面…

.Net Gacutil工具(全局程序集缓存工具)使用教程

GAC介绍&#xff1a; GAC&#xff08;Global Assembly Cache&#xff09;全局程序集缓存&#xff0c;是用于存放.Net应用程序共享的程序集。 像平常我们在Visual Studio中引用系统程序集时&#xff0c;这些程序集便来自于GAC。 GAC默认位置为&#xff1a;%windir%\Microsoft…

visual prompt tuning和visual instruction tuning

visual prompt tuning&#xff1a;作为一种微调手段&#xff0c;其目的是节省参数量&#xff0c;训练时需要优化的参数量小。 输入&#xff1a;视觉信息image token可学习的prompt token 处理任务&#xff1a;比如常见的分类任务 visual prompt tuning visual instruction tu…

【网络】高级IO——poll版本TCP服务器

目录 前言 一&#xff0c;poll函数 1.1.参数一:fds 1.2.参数二&#xff0c;nfds 1.3.参数三&#xff0c;timeout 1.4.返回值 1.5.poll函数简单使用示例 二&#xff0c;poll版TCP服务器编写 2.1.编写 2.2.poll的优缺点 2.3.源代码 前言 由于select函数有下面几个特别…

基于Python的自然语言处理系列(10):使用双向LSTM进行文本分类

在前一篇文章中&#xff0c;我们介绍了如何使用RNN进行文本分类。在这篇文章中&#xff0c;我们将进一步优化模型&#xff0c;使用双向多层LSTM来替代RNN&#xff0c;从而提高模型在序列数据上的表现。LSTM通过引入一个额外的记忆单元&#xff08;cell state&#xff09;来解决…

Linux:vim编辑技巧

命令模式 光标跳转 输入18&#xff0c;再输入G&#xff0c;可以跳转到18行。 复制、粘贴、删除 P是往上一行粘贴 小写u可以撤销 查找/撤销/保存 大写U可能失效&#xff0c;用CTRLr 末行模式 保存/退出/文件操作 字符串替换 开关参数的控制

基于python+django+vue的在线学习资源推送系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

近乎实时的物联网数据管道架构

这篇论文的标题是《Near Real-Time IoT Data Pipeline Architectures》&#xff0c;作者是 Markus Multamki&#xff0c;完成于 2024 年&#xff0c;属于计算机科学与工程硕士学位论文。论文主要研究了物联网&#xff08;IoT&#xff09;数据分析的可扩展数据管道架构&#xff…

FloodFill算法【下】

417. 太平洋大西洋水流问题 题目链接&#xff1a;417. 太平洋大西洋水流问题 题目解析 题目给我们一个矩阵&#xff0c;这个矩阵相当于陆地&#xff0c;被两个洋包围&#xff0c;左和上代表太平洋&#xff0c;右和下代表大西洋。 矩阵里面的数字代表海拔&#xff0c;水可以…

STM32之FMC—扩展外部 SDRAM

文章目录 一、FMC外设介绍二、SDRAM 控制原理1、SDRAM关键参数a、容量、分区b、引脚SDRAM 使用 2、SDRAM芯片IS42S16400J3、SDRAM 控制引脚说明控制逻辑地址控制SDRAM 的存储阵列SDRAM 的命令预充电刷新 W9825G6KH&#xff1a;W9825G6KH引脚 三、STM32F429 FMC四、其他文章打开…

医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度

文章目录 项目四&#xff1a;回归分析实践目的实践平台实践内容 预测帕金森病病情的严重程度作业&#xff08;一&#xff09;数据读入及理解&#xff08;二&#xff09;数据准备&#xff08;三&#xff09;模型建立&#xff08;四&#xff09;模型预测&#xff08;五&#xff0…

神经网络通俗理解学习笔记(4) 深度生成模型VAE、GAN

深度生成模型 什么是生成式模型蒙特卡洛方法变分推断Variational Inference变分自编码器VAE生成对抗网络Generative Adversarial NetworkDiffusion 扩散模型VAE和GAN 代码实现 什么是生成式模型 判别式和生成式模型 判别式:CNN/RNN/transformer;生成式:AE/VAE/GAN 判别式模型学…

Linux:RPM软件包管理以及Yum软件包仓库

挂载光驱设备 RPM软件包管理 RPM软件包简介 区分软件名和软件包名 软件名&#xff1a;firefox 软件包名&#xff1a;firefox-52.7.0-1.el7.centos.x86_64.rpm 查询软件信息 查询软件&#xff08;参数为软件名&#xff09; ]# rpm -qa #当前系统中所有已安装的软件包 ]# r…

Unity实战案例全解析 :PVZ 植物脚本分析

植物都继承了Pants脚本&#xff0c;但是我因为没注意听讲&#xff0c;把Pants也挂在植物上了&#xff0c;所以子类的PlantEnableUpdate和PlantDisableUpdate抢不过父类&#xff0c;无法正确触发动画&#xff0c;我还找不到哪里出了问题&#xff0c;所以就使用了携程加while强行…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接&#xff08;文件-->新建连接-->MySQL&#xff09; 进入到这个界面中&#xff1a; 【注意&#xff1a;密码是下载登录软件时设定过的】 创建一个连接完成&#xff08;通过双击激活&#xff09;。 2.在创建好的连接中创建数据库…

神经网络通俗理解学习笔记(5) 自然语言处理

自然语言处理 词嵌入和word2vec词义搜索和句意表示预训练模型Hugging Face库介绍经典NLP数据集代码案例-电影评论情感分析 词嵌入和word2vec 词嵌入是一种 将高维的数据表示映射到低维空间的方法 word embedding 是将语言中的词编码成向量便于后续的分析和处理 词嵌入和词向量…