【滑动窗口】LC 3.无重复字符的最长子串

文章目录

前言

本专栏文章为《LeetCode 热题 100》的刷题题解,相关内容如有侵权,立即删除。

一、题目

1、原题链接

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

2、题目描述

二、个人思路整理

1、思路分析

核心思路:滑动窗口(双指针)+哈希表/定长数组。

  • 维护窗口[left,right]:用右指针right遍历字符串,逐步扩大窗口。
  • 记录位置:使用哈希表或大小为128/256的数组记录每个字符上一次出现的下标。
  • 左指针跳跃:当遇到重复字符c且其上次出现位置处于当前窗口内时,将左指针直接跳跃更新为 max ⁡ ( l e f t , 上次出现位置 + 1 ) \max(left, \text{上次出现位置} + 1) max(left,上次出现位置+1),保证窗口内无重复字符。
  • 更新答案:每次右指针移动后,当前窗口长度为 r i g h t − l e f t + 1 right - left + 1 right−left+1,实时更新最大长度。

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),右指针遍历一次字符串,左指针单调右移,每个字符最多访问一次。
  • 空间复杂度: O ( ∣ Σ ∣ ) O(\vert{}\Sigma\vert{}) O(∣Σ∣),ASCII 字符集大小为 128,空间为常数级别 O ( 1 ) O(1) O(1)。

2、解题代码

cpp 复制代码
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 记录字符最后一次出现的下标,初始化为1
        vector<int> last_pos(128, -1);
        int max_len = 0;
        int left = 0;

        for (int right = 0; right < s.size(); right++) {
            char c = s[right];
            //如果字符出现过,直接跳到上一次出现位置的下一位
            if (last_pos[c] >= left) {
                left = last_pos[c] + 1;
            }
            last_pos[c] = right;
            max_len = max(max_len, right - left + 1);
        }

        return max_len;
    }
};

三、知识风暴

滑动窗口(Sliding Window) 是处理数组/字符串子区间问题的双指针技巧,通过动态调整窗口边界高效寻找满足条件的子区间。

适用场景:

  1. 子串/子数组问题:寻找最长/最短满足特定条件(如无重复字符、和最大/最小)的连续子串或子数组。
  2. 固定大小窗口问题:计算固定长度窗口内的统计量(如平均值、最大值)。

常见变体:

  • 固定大小窗口:窗口长度固定,左右指针同步移动,用于滑动统计。
  • 可变大小窗口 :窗口长度可变,用于寻找最长或最短子区间。本题属于可变窗口求最长类型。

在本题中的应用:

  • 使用可变窗口寻找最长无重复字符子串。
  • 哈希表(定长数组)的关键作用 :数组 last_pos[128] 记录每个字符最后一次出现的下标,实现 O(1) 时间查找上次出现位置,从而决定左指针是否跳跃(left = last_pos[c] + 1),这是算法高效的核心。

相关 LeetCode 例题:

相关推荐
LMT流氓兔1 分钟前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
物联网软硬件开发-轨物科技1 小时前
【轨物方案】深度解读开关柜智能感知及一键顺控专家系统
大数据·运维·网络·人工智能·算法·机器人
行者全栈架构师1 小时前
我用 TRAE Work 把桌游之夜搬进了浏览器:一个计分器的从创意到上线
前端·算法·架构
YFJ_mily1 小时前
【10-12月优质学术会议合集】会议覆盖人工智能、大数据、高端装备、软件与网络安全 、计算机视觉技术等热门方向
算法·安全·web安全·网络安全·软件·rdlink研发家
库玛西2 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
库玛西2 小时前
计算机网络第三章:数据链路层
服务器·网络·计算机网络·考研·算法·面试
邹霍梁@开源软件GoodERP2 小时前
【出海 ERP】本地没库存时:自产自销还是转口贸易?一张决策树给财务和 IT
算法·决策树·机器学习
程序 代码狂人2 小时前
经典 SQL 面试题:连续登录问题的两种经典解法
java·开发语言·算法
大熊背2 小时前
一种数码相机快速自动曝光控制方法解读
算法·计算机视觉·自动曝光·快速收敛