news 2026/5/5 9:55:30

LeetCode Hot 100:无重复的最长子串解题思路详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode Hot 100:无重复的最长子串解题思路详解

LeetCode Hot 100:无重复的最长子串解题思路详解

最近在刷 LeetCode Hot 100 题目时,遇到了一道经典题目——无重复的最长子串(Longest Substring Without Repeating Characters)。虽然题目名称和你提供的代码似乎有些出入(你给出的代码更像是「移动零」问题),但本文将围绕「无重复的最长子串」进行详细讲解,并指出可能的误解。


📌 题目描述

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

示例:

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

❗ 注意:你提供的代码对应的是「移动零」问题

你贴出的 Java 代码实际上是 LeetCode 第 283 题「移动零」 的典型双指针解法,而不是「无重复的最长子串」的解法。我们先来澄清这一点:

public void move(int[] nums) { int left = 0, right = 0; int n = nums.length; while (right < n) { if (nums[right] != 0) { swap(nums, left, right); left++; } right++; } } public void swap(int[] nums, int left, int right) { int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; }

这段代码的作用是将数组中的所有非零元素移到前面,零移到后面,保持相对顺序。它使用了双指针技巧left指向下一个非零元素应放置的位置,right遍历整个数组。


✅ 正确题目:无重复的最长子串(LeetCode #3)

🔍 解题思路:滑动窗口 + 哈希表

我们要解决的问题是:在一个字符串中找没有重复字符的最长子串

我们可以使用滑动窗口(Sliding Window)技巧配合HashSet来记录当前窗口内的字符。

  • 使用两个指针leftright表示窗口边界。
  • right不断向右扩展,遇到新字符时判断是否已在窗口中。
  • 如果已存在,则移动left直到该字符不再重复。
  • 维护一个最大长度变量maxLen记录历史最长值。
✅ Java 实现
import java.util.HashSet; public class Solution { public int lengthOfLongestSubstring(String s) { int left = 0, right = 0; int maxLen = 0; HashSet<Character> seen = new HashSet<>(); while (right < s.length()) { char c = s.charAt(right); while (seen.contains(c)) { seen.remove(s.charAt(left)); left++; } seen.add(c); maxLen = Math.max(maxLen, right - left + 1); right++; } return maxLen; } }
⏱️ 时间复杂度
  • 时间复杂度:O(n),每个字符最多被访问两次(left 和 right 各一次)
  • 空间复杂度:O(min(m,n)),哈希集大小取决于字符集(如 ASCII)

💡 总结

| 问题 | 方法 | |------|------| | 移动零 | 双指针 + 交换 | | 无重复的最长子串 | 滑动窗口 + HashSet |

⚠️ 刷题时一定要注意题目与代码的一致性!混淆题号或逻辑可能导致理解偏差。


📌建议学习路径:

  1. 掌握双指针基础(如移动零、删除重复项)
  2. 进阶学习滑动窗口模型(适用于子串/子数组问题)
  3. 结合哈希表、队列等数据结构提升效率

如果你也在刷 LeetCode,欢迎关注我一起打卡成长!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 16:32:13

【Linux 进程核心】父子进程关系、终止与资源回收

一、父子进程的核心关系&#xff1a;写时复制&#xff08;Copy On Write&#xff09;子进程是父进程的 “复制品”&#xff0c;但 Linux 2.6 之后&#xff08;如 Ubuntu 18/20&#xff0c;内核 5.4&#xff09;采用写时复制&#xff08;COW&#xff09; 机制优化内存复制&#…

作者头像 李华
网站建设 2026/5/5 9:19:57

Lottie动画性能突破:从加载瓶颈到极致优化的技术实践

Lottie动画性能突破&#xff1a;从加载瓶颈到极致优化的技术实践 【免费下载链接】lottie-web 项目地址: https://gitcode.com/gh_mirrors/lot/lottie-web 在当今Web应用追求极致用户体验的背景下&#xff0c;Lottie动画凭借其矢量特性与跨平台能力成为界面动效的首选方…

作者头像 李华
网站建设 2026/4/24 16:25:47

SEO 时代被玩烂

SEO 时代被玩烂&#xff0c;是从“快排”“站群”“假官网”“万词霸屏”开始的;GEO时代才刚冒头&#xff0c;就已经有人开始复制同一套玩法了&#xff1a;百度自己推出了 GEO 产品。下图是别人发的新闻&#xff0c;文章的的核心内容就是说百度入局了GEO优化市场&#xff0c;而…

作者头像 李华
网站建设 2026/5/4 17:39:58

AI一键搞定Homebrew安装:告别繁琐命令行

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个AI辅助的Homebrew安装助手&#xff0c;能够根据用户系统环境自动生成最优安装命令。功能包括&#xff1a;1.检测macOS版本和架构 2.自动配置国内镜像源 3.生成带进度显示的…

作者头像 李华
网站建设 2026/5/2 21:25:05

2025 封神级大模型技术手册:LLM、RAG、Agent、MCP 核心逻辑全拆解

2025年的人工智能领域&#xff0c;早已不是单一模型的竞技场&#xff0c;而是一套协同作战的技术生态。从能理解语言的基础引擎&#xff0c;到能自主完成复杂任务的智能系统&#xff0c;LLM、ChatGPT、RAG、Function Call、Agent、MCP这六大核心技术层层递进&#xff0c;构成了…

作者头像 李华
网站建设 2026/5/4 20:32:13

AI一键搞定!Windows安装JDK1.8全自动解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Windows平台自动安装JDK1.8的脚本工具。功能包括&#xff1a;1.自动检测系统架构(32/64位) 2.从Oracle官网获取最新JDK1.8下载链接 3.静默安装模式 4.自动配置JAVA_HOME环境…

作者头像 李华