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

leetcode 题目解析 第3题 无重复字符的最长子串

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

示例 1:

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

示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

💡分析:

1、不含重复字符的子串

2、求最长子串的长度

🫤思路:

以“s = abcabcbb”为例,以下是手动处理过程:

a
ab
abc
abca  :字段重复,去除最左边的字符 a s[0]
bca
bcab  :字段重复,去除最左边的字符 b s[1]
cab 
cabc  :字段重复,去除最左边的字符 c s[2]
abc
abcb  :字段重复,去除最左边的字符 a s[3]
bcb   :字段重复,去除最左边的字符 b s[4]
cb
cbb   :字段重复,去除最左边的字符 c s[5]
bb    :字段重复,去除最左边的字符 b s[6]
b

综上所述:

1、需要一个循环遍历字段;

2、需要一个容器来存放子串字符,并通过该容器判断子串是否重复,考虑到子串可能很长,使用集合(set)比列表更适合,因为集合的查找性能更优;

3、需要一个变量,存放“子串最左边字符” 在“字段s”中的下标位置;

4、需要一个变量,用于存储最长子串的长度;

现在开始编写代码(python3):

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 定义一个集合,存放子串的字符
        child_set = set()
        # 定义一个变量,存放子串最左边字符在字段中的下标,初始下标为0
        left = 0
        # 定义一个变量,存放子串最大长度,初始值为0
        max_len = 0
        # 循环遍历字段s
        for sc in s:
            '''
            判断待添加字符加入集合是否会重复,如果重复,则删除子串最左侧字符
            '''
            # if sc in child_set:
                # child_set.remove(s[left])
                # left += 1
            '''
            因为删除的是最左侧的字符,而不是待添加字符,
            所以待添加字符在集合中可能还是会重复,
            所以这里需要一个while循环,而不是if
            '''
            while sc in child_set:
                child_set.remove(s[left])
                left += 1
            # 确保不重复后,将待添加字符,加入进集合
            child_set.add(sc)
            # 记录集合最大长度,即子串最大长度
            max_len = max(max_len,len(child_set))
        return max_len

然后,这就是 滑动窗口算法

http://www.dtcms.com/a/32154.html

相关文章:

  • go 环境准备
  • cadence报错解决1
  • 光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验
  • at32f403a rt thread led基础bsp工程测试
  • 黑神话悟空火焰山攻略来了
  • 041集——封装之:新建图层(CAD—C#二次开发入门)
  • 动态订阅kafka mq实现(消费者组动态上下线)
  • 代码随想录-训练营-day35
  • 基于ffmpeg+openGL ES实现的视频编辑工具-添加转场(九)
  • C语言进阶习题【3】(7预处理)——写一个宏计算结构体变量相对于首地址的偏移
  • 先进制造aps专题三十 用免费生产排程软件isuperaps进行长期生产计划制定
  • 计算机图形学:实验环境配置
  • 基于Matlab实现串口实时显示波形GUI界面(源码)
  • Linux 驱动入门(6)—— IRDA(红外遥控模块)驱动
  • 代码随想录算法训练营day40(补0208)
  • “死”循环(查漏补缺)
  • 055 SpringCache
  • cs106x-lecture14(Autumn 2017)-SPL实现
  • 【Java进阶学习 第五篇】JDK8、9中的接口新特性
  • ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用
  • 第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
  • kafka+spring cloud stream 发送接收消息
  • 华为OD机试真题-相对开音节-OD统一考试(E卷)
  • Meterpreter之getsystem命令提权原理详解
  • Zotero 快速参考文献导出(特定期刊引用)
  • 区块链相关方法-波士顿矩阵 (BCG Matrix)
  • Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现
  • 在LangFlow中集成OpenAI Compatible API类型的大语言模型
  • 不同类型的网站选择不同的服务器,那么应该怎么选择服务器呢?
  • STM32-心知天气项目