当前位置: 首页 > news >正文

3.无重复字符的最长子串 python

无重复字符的最长子串

  • 题目描述
    • 示例 1:
    • 示例 2:
    • 示例 3:
    • 提示:
    • 题目链接
  • 解题思路
    • Python 实现
    • 详细解释

题目描述

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

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

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

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

题目链接

无重复字符的最长子串

要找出字符串 s 中不含有重复字符的最长子串的长度,可以使用滑动窗口技术。滑动窗口是一种常用的算法技巧,适用于解决这类问题,因为它可以在一次遍历中高效地找到最优解。

解题思路

  1. 初始化变量

    • leftright 两个指针,分别表示滑动窗口的左右边界。
    • max_length 用于记录最长子串的长度。
    • char_set 用于存储当前窗口内的字符,确保窗口内没有重复字符。
  2. 滑动窗口

    • 使用 right 指针从左到右遍历字符串。
    • 如果 right 指针指向的字符不在 char_set 中,将其添加到 char_set 中,并更新 max_length
    • 如果 right 指针指向的字符已经在 char_set 中,说明出现了重复字符,需要移动 left 指针,直到窗口内不再包含重复字符。
  3. 更新结果

    • 每次移动 right 指针时,更新 max_length,确保记录最长的无重复字符子串的长度。

Python 实现

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 初始化变量left = 0max_length = 0char_set = set()# 滑动窗口for right in range(len(s)):# 如果当前字符不在集合中,添加到集合if s[right] not in char_set:char_set.add(s[right])max_length = max(max_length, right - left + 1)else:# 如果当前字符已经在集合中,移动左指针while s[right] in char_set:char_set.remove(s[left])left += 1char_set.add(s[right])return max_length

详细解释

  1. 初始化变量

    • left = 0:左指针初始位置为0。
    • max_length = 0:初始最长子串长度为0。
    • char_set = set():初始化一个集合,用于存储当前窗口内的字符。
  2. 滑动窗口

    • for right in range(len(s)):右指针从0到字符串的最后一个位置遍历。
    • if s[right] not in char_set:如果当前字符不在集合中,将其添加到集合中,并更新 max_length
    • else:如果当前字符已经在集合中,说明出现了重复字符,需要移动 left 指针,直到窗口内不再包含重复字符。
      • while s[right] in char_set:移动 left 指针,直到 s[right] 不在集合中。
      • char_set.remove(s[left]):从集合中移除 left 指针指向的字符。
      • left += 1:移动 left 指针。
    • char_set.add(s[right]):将当前字符添加到集合中。
  3. 返回结果

    • return max_length:返回最长无重复字符子串的长度。

通过这种方法,我们可以在一次遍历中找到最长的无重复字符子串,时间复杂度为 (O(n)),空间复杂度为 (O(min(n, m))),其中 (n) 是字符串的长度,(m) 是字符集的大小。

相关文章:

3.无重复字符的最长子串 python

无重复字符的最长子串 题目描述示例 1:示例 2:示例 3:提示&#xff1a;题目链接 解题思路Python 实现详细解释 题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长 子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子…...

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…...

高危,Laravel参数注入漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中&#xff0c;Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv]&#xff0c;但没有检查运行环境是否为 CLI…...

【漏洞复现】|智互联SRM智联云采系统quickReceiptDetail SQL注入漏洞

漏洞描述 智互联(深圳)科技有限公司SRM智联云采系统针对企业供应链管理难题&#xff0c;及智能化转型升级需求&#xff0c;智联云采依托人工智能、物联网、大数据、云等技术&#xff0c;通过软硬件系统化方案&#xff0c;帮助企业实现供应商关系管理和采购线上化、移动化、智能…...

【Visual Studio系列教程】如何在 VS 上编程?

上一篇博客中&#xff0c;我们介绍了《什么是 Visual Studio&#xff1f;》。本文&#xff0c;我们来看第2篇《如何在 VS 上编程&#xff1f;》。阅读本文大约10 分钟。我们会向文件中添加代码&#xff0c;了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…...

Pytest-Bdd-Playwright 系列教程(12):步骤参数 parsers参数解析

Pytest-Bdd-Playwright 系列教程&#xff08;12&#xff09;&#xff1a;步骤参数 & parsers参数解析 前言一、什么是步骤参数&#xff1f;二、pytest-bdd 的步骤参数用法2.1 简单字符串解析2.2 自定义正则表达式解析2.3 参数类型转换 三、案例&#xff1a;基于 pytest-bdd…...

java 增强型for循环 详解

Java 增强型 for 循环&#xff08;Enhanced for Loop&#xff09;详解 增强型 for 循环&#xff08;也称为 “for-each” 循环&#xff09;是 Java 从 JDK 5 开始引入的一种便捷循环语法&#xff0c;旨在简化对数组或集合类的迭代操作。 1. 基本语法 语法格式 for (类型 变量…...

RUST学习教程-安装教程

文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成&#xff0c;当出现command not found的时候&#xff0c;需要source一下…...

第十六届蓝桥杯模拟赛(第一期)-c++/c

c/c蓝桥杯模拟赛题解&#xff0c;非常详细 质因数 1、填空题 【问题描述】 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提…...

使用uniapp编写APP的文件上传

使用uniapp插件文件选择、文件上传组件&#xff08;图片&#xff0c;视频&#xff0c;文件等&#xff09; - DCloud 插件市场 实用效果&#xff1a; 缺陷是只能一个一个单独上传...

Go语言从入门到精通

go相关命令 //对go源码进行编译&#xff0c;生成.exe文件 go build go文件名//直接运行go源码&#xff08;生成.exe文件执行后&#xff0c;又删除.exe文件&#xff09; go run go文件名go中的package和import /*package&#xff1a;用来声明这个文件是属于哪个包的*/ package…...

捉虫记录02-Nacos访问失败

目录 一、问题 二、排查 三、解决方案 一、问题 在访问nacos的时候出现以下问题&#xff1a; 二、排查 先用docker logs nacos来查找报错信息 docker logs nacos 看问题报错就是数据源问题&#xff0c;nacos没能连接上mysql 三、解决方案 第一步 docker restart mysql …...

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上&#xff0c;每一秒都至关重要&#xff01;随着科技的发展&#xff0c;增强现实&#xff08;AR&#xff09;技术正在逐步渗透到医疗健康领域&#xff0c;改变着传统的医疗服务模式。 安宝特AR远程协助解决方案&#xff0c;凭借其先进的技术支持和创新…...

超详细:Redis分布式锁

如何基于 Redis 实现一个最简易的分布式锁&#xff1f; 不论是本地锁还是分布式锁&#xff0c;核心都在于“互斥”。 在 Redis 中&#xff0c; SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中的 setIfAbsent 方法)&#xff0c;如果 key 不存在…...

@Autowired 和 @Resource思考(注入redisTemplate时发现一些奇怪的现象)

1. 前置知识 Configuration public class RedisConfig {Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template new RedisTemplate<>();template.setConnectionFactory(facto…...

MTK主板定制_联发科主板_MTK8766/MTK8768/MTK8788安卓主板方案

主流市场上的MTK主板通常采用联发科的多种芯片平台&#xff0c;如MT8766、MT6765、MT6762、MT8768和MT8788等。这些芯片基于64位Cortex-A73/A53架构&#xff0c;提供四核或八核配置&#xff0c;主频可达2.1GHz&#xff0c;赋予设备卓越的计算与处理能力。芯片采用12纳米制程工艺…...

k8s篇之控制器类型以及各自的适用场景

1. k8s中控制器介绍 在 Kubernetes 中,控制器(Controller)是集群中用于管理资源的关键组件。 它们的核心作用是确保集群中的资源状态符合用户的期望,并在需要时自动进行调整。 Kubernetes 提供了多种不同类型的控制器,每种控制器都有其独特的功能和应用场景。 2. 常见的…...

VideoCrafter模型部署教程

一、介绍 VideoCrafter是一个功能强大的AI视频编辑和生成工具&#xff0c;它结合了深度学习和机器学习技术&#xff0c;为用户提供了便捷的视频制作和编辑体验。 系统&#xff1a;Ubuntu22.04系统&#xff0c;显卡&#xff1a;4090&#xff0c;显存&#xff1a;24G 二、基础…...

mysql 与 mybatis 错误记录

DATE_FORMAT(FROM_UNIXTIME(start_time / 1000)只能传秒级时间戳&#xff0c;毫秒级时间戳group后不能select; tinyint(1)会被mybatis自动翻译为Boolean值&#xff0c;可以使用resultMap重新映射一下来解决&#xff0c;select使用了别名&#xff0c;在resultMap中映射column也必…...

本地git多用户ssh配置

仅作备份&#xff0c;不做解释 1. ~/.ssh/config Host jeadyx.gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_jeadyxHost jeady5.gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_…...

macbook外接2k/1080p显示器调试经验

准备工具 电脑 满足电脑和显示器要求的hdmi线或者转接头或者扩展坞 betterdisplay软件 Dell P2419H的最佳显示信息如下 飞利浦 245Es 2K的最佳显示比例如下 首选1152...

如何删除Kafka中的数据以及删除topic

如何删除Kafka数据已经以及删除topic呢&#xff1f; 1、删除数据 先启动Kafka实例 docker exec -it kafka-0 /bin/bash #进去容器 rm -rf /bitnami/kafka/data/* #删除数据 exit #退出如果删除失败&#xff0c;可能是数据不存在于/bitnami/kafka/data&#xff0c;使用 cd /o…...

wordpress二开-WordPress新增页面模板-说说微语

微语说说相当于一个简单的记事本&#xff0c;使用还是比较方便的。这个版本的说说微语CSS样式不兼容&#xff0c;可能有些主题无法适配&#xff0c;但是后台添加内容&#xff0c;前端显示的逻辑已经实现。可以当作Word press二开中自定义页面模板学习~ 一、后台添加说说微语模…...

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

目录 一&#xff0c;数组翻转 二&#xff0c;冒泡排序 三&#xff0c;二分查找&#xff08;一尺之锤&#xff0c;日取其半&#xff0c;万世不竭&#xff09; 一&#xff0c;数组翻转 1.概述:数组对称索引位置上的元素互换&#xff0c;最大值数组序号是数组长度减一 创建跳板…...

使用 OpenAI 进行数据探索性分析(EDA)

探索性数据分析&#xff08;Exploratory Data Analysis, 简称 EDA&#xff09;是数据分析中不可或缺的环节&#xff0c;帮助分析师快速了解数据的分布、特征和潜在模式。传统的 EDA 通常需要手动编写代码或使用工具完成。现在&#xff0c;通过 OpenAI 的 GPT-4 模型&#xff0c…...

Jdk1.8新特性

新增的类以及常用的方法 在Java的java.util.concurrent包中&#xff0c;除了之前提到的并发工具类外&#xff0c;还有一些新增的类以及它们常用的方法。以下是一些例子&#xff1a; 新增的类 ‌CompletableFuture‌&#xff1a; CompletableFuture是Java 8中引入的一个类&a…...

丹摩征文活动 | AI创新之路,DAMODEL助你一臂之力GPU

目录 前言—— DAMODEL&#xff08;丹摩智算&#xff09; 算力服务 直观的感受算力提供商的强大​ 平台功能介绍​ 镜像选择 云磁盘创建 总结 前言—— 只需轻点鼠标,开发者便可拥有属于自己的AI计算王国 - 从丰富的GPU实例选择,到高性能的云磁盘,再到预配置的深度学习…...

mock.js:定义、应用场景、安装、配置、使用

前言&#xff1a;什么是mock.js&#xff1f; 作为一个前端程序员&#xff0c;没有mockjs你不感觉很被动吗&#xff1f;你不感觉你的命脉被后端那个男人掌握了吗&#xff1f;所以&#xff0c;我命由我不由天&#xff01;学学mock.js吧&#xff01; mock.js 是一个用于生成随机…...

优化 MFC CGridCtrl 的表格布局与功能

在使用 MFC 的 CGridCtrl 控件创建表格时&#xff0c;遇到的一个典型问题是&#xff0c;当表格滚动条出现时&#xff0c;最后一列会显示空白。这篇博客将记录解决这一问题的详细过程&#xff0c;同时总结了 CGridCtrl 初始化及优化的关键步骤&#xff0c;帮助开发者快速搭建一个…...

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…...

直播预告| 深入探索 DB-GPT GraphRAG 的设计解读与优化

前言 感谢DB-GPT的社区朋友持续关注我们的源码解读系列&#xff5e;在前几期的直播中&#xff0c;我们深入探讨了DB-GPT的架构设计、智能体工作流、Agent开发等话题&#xff0c;受到了热烈反响。 本期&#xff0c;我们邀请到了社区的老朋友&#xff0c;也是DB-GPT GraphRag的维…...

C语言:指针变量作为函数参数

在c语言中&#xff0c;函数的参数不仅可以是整数&#xff0c;小数、字符等具体的数据&#xff0c;还可以是指向他们的指针&#xff0c;用指针变量做函数&#xff0c;参数可以将函数外部的地址传递给函数内部&#xff0c;使得在函数内部可以操作函数外部的数据&#xff0c;并且这…...

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…...

RecyclerView详解——(四)缓存复用机制

稍微看了下源码和部分文章&#xff0c;在此做个小小的总结 RecyclerView&#xff0c;意思为可回收的view&#xff0c;那么相对于listview&#xff0c;他的缓存复用肯定是一大优化。 具体而言&#xff0c;当一个列表项被移出屏幕后&#xff0c;RecyclerView并不会销毁其视图&a…...

向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)

1.Locality Sensitive Hashing (LSH) 使用 Shingling MinHashing 进行查找 左侧是字典&#xff0c;右侧是 LSH。目的是把足够相似的索引放在同一个桶内。 LSH 有很多的版本&#xff0c;很灵活&#xff0c;这里先介绍第一个版本&#xff0c;也是原始版本 Shingling one-hot …...

速盾:CDN缓存的工作原理是什么?

CDN&#xff08;内容分发网络&#xff09;是一种将内容分发到全球不同地理位置的网络架构&#xff0c;以提供更快速、可靠的内容传输。其核心原理是利用缓存技术&#xff0c;将数据内容分布到离用户最近的边缘节点上。当用户请求内容时&#xff0c;CDN将根据用户的IP地址&#…...

使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变

作者&#xff1a;来自 Elastic Greg Crist Elasticsearch 推出了一项新功能&#xff1a;Elastic AI Assistant for Search。你可以将其视为 Elasticsearch 和 Kibana 开发人员的内置指南&#xff0c;旨在回答问题、引导你了解功能并让你的生活更轻松。在 Microsoft AI Services…...

SQL基础语法介绍-基于MySQL

文章目录 一、SQL分类二、SQL语法1.数据库字段类型1.1.数值类型1.2 字符类型1.3 日期类型 2.字段约束2.1约束介绍2.2 非空约束&#xff08;not null&#xff09;2.3 唯一约束&#xff08;unique&#xff09;2.4 主键约束&#xff08;primary key&#xff09;2.5 自增长主键2.6 …...

android 性能分析工具(03)Android Studio Profiler及常见性能图表解读

说明&#xff1a;主要解读Android Studio Profiler 和 常见性能图表。 Android Studio的Profiler工具是一套功能强大的性能分析工具集&#xff0c;它可以帮助开发者实时监控和分析应用的性能&#xff0c;包括CPU使用率、内存使用、网络活动和能耗等多个方面。以下是对Android …...

【STM32项目】基于STM32设计的震动马达超声波电机高频震动——高级定时器PWM互补输出带死区控制

高级定时器PWM互补输出带死区控制 前言:实现高级定时器互补输出带死区控制,实现震动/超声波电机/马达,高频震动。使用 STM32F103 芯片输出两路互补 PWM,并带有死区和刹车控制功能。 定时器 1 通道 1 及其互补通道输出 PWM,且带死区控。当定时器 1 的刹车输入引脚被拉…...

深入探索Golang的GMP调度机制:源码解析与实现原理

在Golang&#xff08;又称Go语言&#xff09;的并发编程模型中&#xff0c;GMP调度模型扮演着举足轻重的角色。GMP分别代表Goroutine&#xff08;协程&#xff09;、M&#xff08;Machine&#xff0c;即内核线程&#xff09;和P&#xff08;Processor&#xff0c;即逻辑处理器&…...

Django如何配置多个环境的MySQL数据库

在 Django 项目中配置多个环境的 MySQL 数据库是一个常见的需求&#xff0c;特别是在开发、测试和生产环境中使用不同的数据库配置。你可以通过在 settings.py 文件中使用条件语句或环境变量来实现这一点。 1. 使用环境变量 使用环境变量是一种灵活且安全的方式来配置多个环境…...

数据结构(链栈——c语言实现)

链式栈&#xff08;Linked Stack&#xff09;是一种基于链表数据结构实现的栈。它利用链表节点的指针来存储元素&#xff0c;并通过指针的链接关系来维护栈的后进先出&#xff08;LIFO, Last In First Out&#xff09;特性。 链式栈的优点 动态大小&#xff1a; 链式栈…...

FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示

本文目录索引 区别一:启动流程的区别区别二:高位地址处理区别三:地址映射例程说明总结例程地址之前一直都是以SPI FLASH为例进行相关知识讲解,今天我们介绍另一款常用的配置FLASH-BPI FLASH。 今天的讲解以简洁为主,主打个能用一句话不说两句话。以和SPI区别为主,实例演…...

Android 网络通信(三)OkHttp实现登入

学习笔记 目录 一. 先写XML布局 二、创建 LoginResponse 类 :封装响应数据 目的和作用: 三、创建 MyOkHttp 类 :发送异步请求 代码分析 可能改进的地方 总结 四、LoginActivity 类中实现登录功能 详细分析与注释: 总结: 改进建议: 零、响应数据样例 通过 P…...

java基础概念37:正则表达式2-爬虫

一、定义 【回顾】正则表达式的作用 作用一&#xff1a;校验字符串是否满足规则作用二&#xff1a;在一段文本中查找满足要求的内容——爬虫 二、本地爬虫VS网络爬虫 2-1、本地爬虫 示例&#xff1a; 代码优化&#xff1a; public static void main(String[] args) {// 大…...

【大数据学习 | Spark-Core】RDD的概念与Spark任务的执行流程

1. RDD的设计背景 在实际应用中&#xff0c;存在许多迭代式计算&#xff0c;这些应用场景的共同之处是&#xff0c;不同计算阶段之间会重用中间结果&#xff0c;即一个阶段的输出结果会作为下一个阶段的输入。但是&#xff0c;目前的MapReduce框架都是把中间结果写入到HDFS中&…...

day06(单片机高级)PCB设计

目录 PCB设计 PCB设计流程 元器件符号设计 原理图设计 元器件封装设计 元器件库使用 PCB设计 目的&#xff1a;学习从画原理图到PCB设计的整个流程 PCB设计流程 元器件符号设计 元器件符号&#xff1a;这是电子元器件的图形表示&#xff0c;用于在原理图中表示特定的元器件。例…...

[Redis#2] 定义 | 使用场景 | 安装教程 | 快!

目录 1. 定义 In-memory data structures 在内存中存储数据 2. 优点&#xff01;快 Programmability 可编程性 Extensibility 扩展性 Persistence 持久化 Clustering 分布式集群 High availability 高可用性 ⭕快速访问的实现 3. 使用场景 1.Real-time data store …...

docker pull命令拉取镜像失败的解决方案

docker pull命令拉取镜像失败的解决方案 简介&#xff1a; docker pull命令拉取镜像失败的解决方案 docker pull命令拉取镜像失败的解决方案 一、执行docker pull命令&#xff0c;拉取镜像失败 报错信息&#xff1a;error pulling image configuration: Get https://produc…...