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

[python 刷题] 3 Longest Substring Without Repeating Characters

[python 刷题] 3 Longest Substring Without Repeating Characters

题目:

Given a string s, find the length of the longest substring without repeating characters.

这到提要求找的是最长的,没有重复符号的子字符串

解题思路是用双指针+哈希表,左右指针指向子字符串的开始和结束的位置,哈希表存储每个字符串最后出现的下标+1,每次更新右侧指针时,如果当前字符是已经出现的字符,则将左指针移向最后出现的位置

最后更新一下最长子字符串的长度,按照案例过一遍:

开局的时候 dict 是空的,左右指针同时指向空

遇到没重复的字符串, r r r 指向下一个字符

在这里插入图片描述

b, c 没有遇到重复字符,所以持续更新 dict 和右侧指针位置:

在这里插入图片描述

这里存储的所有位置都是下标+1,主要是为了针对只出现 1 个字符的案例,如 " ",如果只是用 r − l r - l rl,得出的结果就是 0 − 0 0 - 0 00,所以针对这个情况,所有存储的位置都是下标+1,计算字符串长度时也用 r − l + 1 r - l + 1 rl+1 的方式补回

遇到了第二个 a:

在这里插入图片描述

这个时候左侧的指针从 0 移到了 1,res 的对比成了 res 3 − 1 + 1 3 - 1 + 1 31+1 的对比,自然长度还是一样的

这个时候同步更新 a 最后出现的坐标位置,移到下一个字符:

在这里插入图片描述

我标了一下,取值永远取的是 r r r l l l 之间的这个字符串长度

另外关于 l l l 的取值也需要做一点额外的对比,如考虑下面这个情况:

在这里插入图片描述

如果取 b b b 之前所在的下标位置,依旧会取到包含重复字符的字符串,因此需要取当前 l l l 和 当前字符上一个下标中的最大值

代码如下:

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# use d to store the last appearance idxd = {}l, res = 0, 0for r, c in enumerate(s):l = max(l, d.get(c, 0))res = max(res, r - l + 1)print(res, l, r, c)d[c] = r + 1return res

相关文章:

[python 刷题] 3 Longest Substring Without Repeating Characters

[python 刷题] 3 Longest Substring Without Repeating Characters 题目: Given a string s, find the length of the longest substring without repeating characters. 这到提要求找的是最长的,没有重复符号的子字符串 解题思路是用双指针哈希表&…...

阿里云轻量应用服务器流量价格表(计费/免费说明)

阿里云轻量应用服务器套餐有的限制月流量,有的不限制月流量,限制每月流量的套餐,如果自带的免费月流量包用完了,流量超额部分需要另外支付流量费,阿里云百科aliyunbaike.com分享阿里云轻量应用服务器月流量超额收费价格…...

C++设计模式-装饰器(Decorator)

目录 C设计模式-装饰器(Decorator) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-装饰器(Decorator) 一、意图 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子…...

【C语言】结构类型的定义和使用

目录 1.结构体(struct)类型 2.结构标记 3.typedef 4.定义结构数组的方法 5.调用结构数组的方法 6.将结构体传入函数 7.结构体使用实例 1.结构体(struct)类型 在C语言中,结构体(struct&#xf…...

C++内存管理:其二、数组内存管理

一、new一个对象数组 如果我们想在堆内存上创建一个对象数组,可以这么写: Complex * pca new Complex[3]; 主要做三件事: (1)申请一块内存,足够放置三个Complex对象。 (2)执行三次…...

No169.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

Hadoop设置hdfs全局指令

在终端进入用户个人环境变量配置文件 vim ~/.bashrc 然后添加如下内容 export PATH$PATH:/usr/local/hadoop/bin 添加到你的hadoop下载目录的bin目录为止就可以了 重新激活一下配置文件 source ~/.bashrc hdfs有专属于自己的文件存储目录,加上特殊的指令就可以箱终端一…...

IDEA 2023.1.3图文安装教程及下载

IDEA 2023.1 最新变化是在 IDEA 2023.1 中,对新 UI 做出了大量改进。实现了性能增强,从而更快导入 Maven,以及在打开项目时更早提供 IDE 功能。 新版本通过后台提交检查提供了简化的提交流程。 IntelliJ IDEA Ultimate 现在支持 Spring Secur…...

【JVM】运行时数据区(内存区域划分)详解

文章目录 前言一、JVM 运行时数据区1, 堆2, Java 虚拟机栈3, 本地方法栈4, 程序计数器5, 元数据区 / 方法区 二、内存异常问题1, 栈溢出2, 内存溢出3, 内存泄露 总结 前言 📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通…...

Python-Scrapy框架(框架学习)

一、概述 Scrapy是一个用于爬取网站数据的Python框架,可以用来抓取web站点并从页面中提取结构化的数据。 基本组件: 引擎(Engine):负责控制整个爬虫的流程,包括调度请求、处理请求和响应等。 调度器(Scheduler):负责…...

flink生成水位线记录方式--基于特殊记录的水位线生成器

背景 在flink基于事件的时间处理中,水位线记录的生成是一个很重要的环节,本文就来记录下几种水位线记录的生成方式的其中一种:基于特殊记录的水位线生成器 基于特殊记录的水位线生成器 我们发送的事件中,如果带有某条特殊记录的…...

Arcgis日常天坑问题(1)——将Revit模型转为slpk数据卡住不前

这段时间碰到这么一个问题,revit模型在arcgis pro里导出slpk的时候,卡在98%一直不动,大约有两个小时。 首先想到的是revit模型过大,接近300M。然后各种减小模型测试,还是一样的问题,大概花了两天的时间&am…...

JavaWeb:上传文件

1.建普通maven项目,或者maven项目,这里以普通maven为例,区别的jar包的导入方式啦 到中央仓库下载哦 2.结构 3.写fileservlet public class FileServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpSe…...

STM32 大小端与字节对齐使用记录

大小端 串口数据包解析 MDK stm32 小段模式 接收到的数据包: DD 03 00 1B 11 59 00 00 00 00 17 70 00 00 2F 39 00 00 00 00 00 03 23 64 00 0E 02 0B 6E 0B 84 FC EA 77 其中数据内容为: DD 03 00 1B 11 59 //电压mV 00 00 00 00 17 70 …...

RabbitMQ中basic**方法汇总与参数解释

当使用RabbitMQ进行消息传递时,Channel对象提供了一组称为"basic方法"的方法,用于执行最基本的消息传递操作。在本篇博客中,我们将详细介绍这些方法,包括示例和参数解释。 1. basicPublish 方法 basicPublish 方法用于…...

linux之/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时,一个需要调用的默认的配置文件之一,可以使用命令"useradd -D"进行修改。 useradd用法: [rootcentos79-3 mail]# useradd --help Usage: useradd [options] LOGINuseradd -Dus…...

3.primitive主数据类型和引用 认识变量

3.1 声明变量 Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧?并且它也不会让你将浮点数类型变量放进整数类型的变量中,除非你先跟编译器确认过数字…...

【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】

文章目录 【获取资源请见文章第5节:资源获取】1. 光学显微镜算法(OMA)1.1 物镜放大倍数1.2 目镜放大倍数 2. 改进后的IOMA算法2.1 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节:…...

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…...

【C++】设计模式之——建造者

建造者模式概念模拟实现建造者模式代码实现 建造者模式 首先先大体了解一下,建造者模式是什么意思,它是怎么实现的? 首先,建造者模式是一种创建型设计模式再一个它是使用多个简单的对象一步一步的搭建出一个复杂的对象它可以将一个…...

三自由度机械手-工业机器人(说明书+CAD图纸)

三自由度机械手作为工业机器人领域的典型代表,其核心作用在于通过三个独立运动轴的协同控制,实现末端执行器在三维空间内的精准定位与灵活操作。这种结构通过旋转、俯仰与伸缩三个方向的复合运动,能够覆盖工作空间内的任意目标点,…...

Typora风格文档化:使用Markdown实时记录PyTorch 2.8实验过程

Typora风格文档化:使用Markdown实时记录PyTorch 2.8实验过程 1. 为什么需要实验过程文档化 在深度学习研究领域,实验过程的可复现性一直是个老大难问题。很多研究者都有这样的经历:三个月前跑的实验,现在想复现结果,…...

让大模型乖乖听话:新手程序员必备的Prompt写作秘籍(收藏版)

本文探讨了如何通过精心设计的Prompt让大模型按照要求思考,提升任务执行的准确性。作者提出了一个有效的Prompt结构,包括角色/任务定义、核心原则、上下文处理、CoT(Chain of Thoughts)思考链、输出规范和Few-Shot示例等模块。文章还介绍了如何借助模型生…...

Qwen3-Embedding-4B GPU算力优化:CUDA Stream并发执行向量化与相似度计算,吞吐提升1.8倍

Qwen3-Embedding-4B GPU算力优化:CUDA Stream并发执行向量化与相似度计算,吞吐提升1.8倍 1. 引言:当语义搜索遇上性能瓶颈 想象一下,你正在使用一个智能语义搜索工具,输入“我想吃点东西”,它立刻为你找到…...

PyTorch实战:用门控卷积(GConv)和转置门控卷积(TrGConv)搞定音频降噪(附完整代码)

PyTorch实战:用门控卷积(GConv)和转置门控卷积(TrGConv)构建高效音频降噪模型 音频降噪一直是信号处理领域的核心挑战之一。想象一下,你正在录制一段重要的语音备忘录,背景中却充斥着风扇的嗡嗡…...

Flux Sea Studio 极限测试:生成8K超高清巨幅海景壁纸的技术挑战与实现

Flux Sea Studio 极限测试:生成8K超高清巨幅海景壁纸的技术挑战与实现 最近在折腾AI生成图片,发现一个挺有意思的挑战:用Flux Sea Studio这类模型,能不能做出那种能铺满整块大屏幕的、细节拉满的8K超高清壁纸?特别是海…...

OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关,部署核心是先装 **Node.js ≥ 22**,再用 npm 全局安装并完成配置向导

OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关,部署核心是先装 Node.js ≥ 22,再用 npm 全局安装并完成配置向导。以下是完整部署流程: 一、环境准备(必做) 1. 安装 Node.js 22 OpenClaw 要求 Node.js ≥ 22&…...

OpenClaw二次开发指南:Qwen3.5-9B模型适配与API扩展

OpenClaw二次开发指南:Qwen3.5-9B模型适配与API扩展 1. 为什么需要二次开发OpenClaw? 去年冬天,当我第一次尝试用OpenClaw对接本地部署的Qwen3.5-9B模型时,遇到了几个棘手问题:模型返回的JSON格式与框架预期不符、长…...

从MySQL到Doris:手把手教你无缝迁移数据模型(附分区分桶实战配置)

从MySQL到Doris:数据模型迁移实战与分区分桶深度优化 如果你正在使用MySQL处理海量数据分析任务,可能会遇到查询性能瓶颈、复杂聚合计算效率低下等问题。Apache Doris作为新一代MPP分析型数据库,兼容MySQL协议却提供了完全不同的底层架构设计…...

手把手教你用PyTorch复现YOLOv8的Pose Head:从零搭建关键点检测模块

手把手教你用PyTorch复现YOLOv8的Pose Head:从零搭建关键点检测模块 在计算机视觉领域,目标检测与姿态估计的结合正成为工业界和学术界的热点。YOLOv8作为YOLO系列的最新成员,其姿态估计模块(Pose Head)的设计尤为精妙…...