尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【leetcode复健-6】无重复字符的最长字串-滑动窗口的运用
3. 无重复字符的最长子串 - 力扣LeetCode摘要本文我将分享解决「无重复字符的最长子串」这道力扣题目的核心思路。我会重点讲解滑动窗口与哈希字典的结合使用并剖析一个关键陷阱遇到重复字符时不应丢弃整个当前子串而应巧妙地更新窗口左边界。通过变量x记录无效字符边界我们可以在一次遍历中高效求解。文末提供了可直接运行的 Python 代码实现。给定一个字符串s请你找出其中不含有重复字符的最长 子串的长度。示例 1:输入: s abcabcbb 输出: 3 解释: 因为无重复字符的最长子串是 abc所以其长度为 3。 注意 bca 和 cab 也是正确答案。示例 2:输入: s bbbbb 输出: 1 解释: 因为无重复字符的最长子串是 b所以其长度为 1。示例 3:输入: s pwwkew 输出: 3 解释: 因为无重复字符的最长子串是 wke所以其长度为 3。 请注意你的答案必须是 子串 的长度 pwke 是一个子序列不是子串。正解class Solution: def lengthOfLongestSubstring(self, s: str) - int: hash1 {} max_len 0 cur_len 0 x -1 for i in range(len(s)): if s[i] not in hash1: hash1[s[i]] i cur_len 1 elif hash1[s[i]] x: hash1[s[i]] i cur_len 1 else: x hash1[s[i]] cur_len i - hash1[s[i]] hash1[s[i]] i max_len max(cur_len, max_len) return max_len坑点与要点这道题首先有两个要求1. 只要求给出最长字串的长度2. 字串中不含重复字符这道题最坑的地方在于当一个字串中出现重复字串时我们会下意识的把这段子串完全丢弃并从改字串的下一个字符开始寻找下一个字串。然而这是错的这么做会导致我们丢失一大段已经寻找到的无重复字符的子串。因此对于一个出现重复字符的子串来说重复的字母一定位于该字串的首尾位置此时我们应该只抛弃该字串的头字符并接续着往下继续寻找无重复字符的字串而不是整段抛弃。如下a s d f g h j k l a z x c v当前遍历发现第二个a最大长度9|| ||重复 发现重复截断第一个字符a新子串 s d f g h j k l a z x c v当前遍历到v最大长度13解答思路使用滑动窗口把视线聚焦于不重复的那一段子串中遇到重复的字符从被重复的字符右边开始继续统计字符长度这就要求我们需要知道重复字符的位置当前子串的长度变为两个重复字符的下标之差因此我们使用字典。key为字符value为下标这里需要额外注意一点我们使用字典记录所有已出现的字符会造成一个问题对于 a b c d c b这段字符串当我们遇到第二个c时字典中a, b, c这三个键值对都应该被舍弃避免影响后续哈希判断但是我们无法准确的丢弃这些字符且IO开销过大因此我们需要一个额外的变量 x 用于记录第一个 c 的下标判断重复时下标小于 x 的字母自动认为不存在字典中如此以来就完成了舍弃操作。代码思路如下# 一张hash1表 字典# 一个变量x记录被重复字符下标# 最大长度max_len, 当前长度cur_len# 遍历一次每次判断当前字母i是否存在于hash1中# 如果不在则按照 字符下标 的形式存入字典 cur_len 1# 如果在但是hash1[s[i]] x 1# 则同样则按照 字符下标 的形式存入字典 cur_len 1# 如果在则 cur_len i - hash1[s[i]]# hash1[s[i]] i# 每次遍历末尾更新max_len代码实现class Solution: def lengthOfLongestSubstring(self, s: str) - int: hash1 {} max_len 0 cur_len 0 x -1 for i in range(len(s)): if s[i] not in hash1: hash1[s[i]] i cur_len 1 elif hash1[s[i]] x: hash1[s[i]] i cur_len 1 else: x hash1[s[i]] cur_len i - hash1[s[i]] hash1[s[i]] i max_len max(cur_len, max_len) return max_len
RELATED

相关推荐

AI预测可变剪接:从统计模型到基因组大模型的演进与实践指南

AI预测可变剪接:从统计模型到基因组大模型的演进与实践指南

1. 从统计模型到基因组大模型:一场预测范式的深刻变革如果你最近在关注基因组学,尤其是转录组和RNA剪接领域,那么“AI预测可变剪接”这个话题一定绕不开。从早期的隐马尔可夫模型(HMM)到如今动辄数十亿参数的基因组大模…

📅 2026/9/16 22:04:18
大模型后训练:离策与在策学习统一框架与工程实践

大模型后训练:离策与在策学习统一框架与工程实践

1. 项目概述:后训练时代的核心命题如果你在过去一年里深度参与过大语言模型(LLM)的应用或微调,大概率会陷入一个选择困境:手头有一批高质量的指令数据,是应该直接拿这些数据去微调模型(这通常被…

📅 2026/9/14 15:41:21
大语言模型评估陷阱:为何追求准确性反而催生幻觉?

大语言模型评估陷阱:为何追求准确性反而催生幻觉?

1. 当“正确”成为陷阱:重新审视大语言模型的评估范式最近和几个做模型评测的朋友聊天,大家不约而同地提到一个现象:我们花大力气设计的那些“准确性”评测集,好像正在把模型往一个奇怪的方向上推。你让模型做数学题,它…

📅 2026/9/8 12:22:39
MORE NEWS

更多资讯

📰

射频开关与功率检波器协同设计实战指南

1. 这不是“调频旋钮”,而是射频信号的精密手术刀你手头有一块PCB,上面焊着两颗黑黢黢的表贴芯片:一颗标着MASWSS0115,另一颗印着R7KA8D2KFLCAC。它们既不发光也不发热,看起来像普通电阻电容,但一旦通电&am…

📰

如何快速保证 3D 打印质量?text-to-cad G-code 校验机制与 6 项自动检查详解

如何快速保证 3D 打印质量?text-to-cad G-code 校验机制与 6 项自动检查详解 【免费下载链接】text-to-cad A library of agent skills for CAD, CAE and CAM 项目地址: https://gitcode.com/GitHub_Trending/tex/text-to-cad 在 text-to-cad 这套面向 CAD/C…

📰

心理咨询师个人体验与督导的重要性解析-中国心理学会心理咨询师水平评价-长春心理咨询培训机构

心理咨询师个人体验与督导的重要性解析中国心理学会心理咨询师水平评价-心理咨询培训机构 如果你开始了解心理咨询行业,可能会经常听到「个人体验」和「督导」这两个词。很多人不太理解:我都要帮别人做咨询了,为什么自己还要做来访者&#xf…

📰

TCS3720与R7KA8D2KFLCAC工业级光感协同设计指南

1. 这不是“又一个光感模块”,而是工业级多模态传感的最小可行单元TCS3720 和 R7KA8D2KFLCAC 这组器件组合,乍看是两颗普通传感器芯片,但实际拆开来看,它构成了一套高度协同、互为校准、软硬一体的环境感知闭环。我最早在汽车座舱…

📰

心理咨询师考试一年考几次?2026年考试时间安排全攻略-中国心理学会心理咨询师水平评价-长春心理咨询培训机构

心理咨询师考试一年考几次?2026年考试时间安排全攻略中国心理学会心理咨询师水平评价-心理咨询培训机构 计划报考心理咨询师水平评价考试的朋友,考试时间安排一定是大家非常关心的问题。一年到底考几次?每次什么时候报名?什么时候…

📰

基于YOLOv8的航拍温室大棚智能检测系统开发实战

1. 项目概述:航拍温室大棚智能检测系统全解析这个基于YOLOv8的航拍温室大棚检测系统,是我在农业智能化领域的一次完整实践。整套方案从数据采集标注到模型训练优化,再到Web端可视化展示,形成了完整的闭环解决方案。系统能够自动识…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬