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

【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】

美美超过管解

题目:

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

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

示例 1:

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

注意:

  1. 考虑空字符串问题
  2. 有重复之后要在重复的那个后面新建序列,减少时间,故需要列表储存(标准做法里用的集合捏)

标准做法:

把重复的set.remove(),a指针步进,没有重复的话,b指针一直步进

怎么感觉没有我那个快捏

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 哈希集合,记录每个字符是否出现过
        occ = set()
        n = len(s)
        # 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
        rk, ans = -1, 0
        for i in range(n):
            if i != 0:
                # 左指针向右移动一格,移除一个字符
                occ.remove(s[i - 1])
            while rk + 1 < n and s[rk + 1] not in occ:
                # 不断地移动右指针
                occ.add(s[rk + 1])
                rk += 1
            # 第 i 到 rk 个字符是一个极长的无重复字符子串
            ans = max(ans, rk - i + 1)
        return ans
        

是真的!

官方:

我的:【必须记录下来】

自己的做法:【通过并超过】

没看解答,写了半小时写出来啦,中间因为字符串不太熟卡了一下

双指针yyds【这里用滑动窗口捏】

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 先写循环结束条件
        # 双指针
        # 放入集合【重大问题:有重复之后要在重复的那个后面新建序列,需要列表】
        a = 0
        b = 0
        
        if s == "":
            return 0
        ls = s[a]
        max_len = 1
        while b < len(s)-1:
            b += 1
            
            if s[b] in ls:
                a = ls.find(s[b]) +1+a 
                ls = s[a:b+1]
            else:
                ls = ls+s[b]
            cur_len = len(ls)
            if max_len < cur_len:
                max_len = cur_len
            
        return max_len
        


http://www.kler.cn/a/574518.html

相关文章:

  • Potplayer 怎么用鼠标左键单击播放暂停
  • GitHub教程
  • 深入理解CAS与乐观锁:Java高并发编程实战指南
  • 视频输入设备-V4L2的开发流程简述
  • css梯形tab
  • SpringMVC请求映射:@RequestMapping的高级用法
  • js 全局的 isNaN和Number.isNaN的区别
  • 深度学习模型组件-RevNorm-可逆归一化(Reversible Normalization)
  • 批量修改或设置 Word 标题、主题、标记、作者、总编辑时间等元数据
  • 蓝桥杯C组真题——巧克力
  • 【3.2-3.8学习周报】
  • MacOS Big Sur 11 新机安装brew wget python3.12 exo
  • Dockerfile概述及编辑
  • 【Oracle学习笔记】2.数据表
  • 2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
  • 深度解码!清华大学第六弹《AIGC发展研究3.0版》
  • 网络协议:HTTP协议
  • 23中设计模式之观察者模式
  • 计算机基础:二进制基础05,八进制简介
  • 如何在WPS中接入DeepSeek并使用OfficeAI助手(超细!成功版本)