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

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

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

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

  • 思路

    1. 滑动窗口法

      • 窗口代表当前考虑的子串

      • 左边界和右边界可以动态调整

    2. 数据结构选择

      • 需要一个高效的方式来判断字符是否重复

      • 考虑使用集合或哈希表来存储窗口内的字符

    3. 窗口扩张与收缩

      • 右指针通常用于扩展窗口(探索新字符)

      • 当发现重复时,左指针用于收缩窗口(排除重复字符)

    4. 记录最大值

      • 在每次窗口调整后,记录当前最大长度
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        recent = set() # 创建一个集合来存储当前窗口的字符
        left = 0
        max_len = 0

        for right in range(len(s)):

            while s[right] in recent: # 如果当前字符已经在set中,移动left指针,直到无重复 (一定是先判断当前字符在不在set中,否则会将重复的字符添加到set中)
                recent.remove(s[left]) 
                left += 1

            recent.add(s[right])
            max_len = max(max_len, right - left + 1) # 更新当前最大无重复子串的长度

        return max_len
  • 时间复杂度:O(n) (每个字符最多被访问两次,左指针和右指针各一次)
  • 空间复杂度:O(min(m, n)) (m 是字符集大小,n 是字符串长度)

相关文章:

  • 解决GitLab无法拉取项目
  • Postman 怎么设置中文?详细教程
  • 给AI装“记忆U盘“:LangChain记忆持久化入门指南
  • Leetcode 二叉树剪枝
  • UI产品经理基础(四):用价值链视角来分析项目需求
  • HCIP笔记整理
  • ctf-web:命令注入 -- Cyber Apocalypse CTF 2025 月光的低语 Whispers of the Moonbeam
  • 【面试题】在 CSS 中,实现一个 div 中的子 div 水平垂直居中
  • 接口测试中数据库验证,怎么解决?
  • 【Qt】modbus客户端笔记
  • Java基础学习【Java】【三】
  • 编辑器检视器面板简单扩展2+编辑器检视器面板深度扩展1
  • 【天梯赛】L2-008 最长对称字串(C++)
  • browser-use 库中异步函数执行时间装饰器
  • 搭建私人对外git空间
  • 内网渗透-DLL和C语言加载木马
  • OpenCV图像拼接(9)实现图像拼接功能的一个高级接口cv::Stitcher
  • C++面试题库
  • 【已解决】Git:为什么 .gitignore 不生效?如何停止跟踪已提交文件并阻止推送?
  • 算法 | 2024最新算法:鳑鲏鱼优化算法原理,公式,应用,算法改进研究综述,matlab代码
  • 做网上任务赚钱的网站/微信营销案例
  • 网站制作关键技术/网络营销包括哪些
  • ipv6网站如何做/成功营销十大经典案例
  • 学校网站建设及使用档案/2023重大新闻事件10条
  • 网站的总体方案/上海网络推广排名公司
  • 个人做的卖货网站/软文发稿网站