码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【LeetCode】3. 无重复字符的最长子串


    目录

      • 1 问题
      • 2 答案
      • 3 知识点
        • 3.1哈希表
        • 3.2滑动窗口

    1 问题

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

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

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

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

    2 答案

    我的不对

    class Solution:
        def lengthOfLongestSubstring(self, s: str) -> int:
            list = []
            l = 0
    
            for i in range(len(s)):
                if s[i] in list:
    
                    list = []
                    list.append(s[i])
                else:
                    list.append(s[i])
                    if len(list) > l:
                        l = len(list)
                
            return l
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输入

    s =
    "dvdf"
    
    • 1
    • 2

    输出

    2
    
    • 1

    预期结果

    3
    
    • 1

    正确答案

    class Solution:
        def lengthOfLongestSubstring(self, s: str) -> int:
    
            max_len, hashmap = 0, {}  # hashmap 用于存放字符,去重
    
            start = 0
            for end in range(len(s)):
    
                hashmap[s[end]] = hashmap.get(s[end], 0) + 1
                if len(hashmap) == end - start + 1: # 考察第0个元素时,窗口大小实际是 end - start + 1
                    max_len = max(max_len, end - start + 1)  # 更新最大值
                
    
                while end - start + 1 > len(hashmap):  # 遍历删除前面的重复值
                    head = s[start]
                    hashmap[head] -= 1
                    if hashmap[head] == 0:
                        del hashmap[head]
                    start += 1
    
            return max_len
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3 知识点

    3.1哈希表

    类似于python中的字典。也叫做散列表。是根据关键码值(Key Value)直接进行访问的数据结构。
    哈希表通过「键 key 」和「映射函数 Hash(key) 」计算出对应的「值 value」,把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做「哈希函数(散列函数)」,存放记录的数组叫做「哈希表(散列表)」。

    https://blog.csdn.net/zy_dreamer/article/details/131036258

    3.2滑动窗口

    是双指针算法的一种,基本思路为维护一个窗口,然后从前往后遍历元素进行运算。

    https://blog.csdn.net/qq_54850598/article/details/127863026

  • 相关阅读:
    136、LeetCode-496.下一个更大元素Ⅰ
    2024年 Openai的API相关全部概论汇总(通用版)
    Go类型全解:常量与变量大全!
    NB!各种免费API接口分享,热门、有意思的都有~
    工业级远距离无线传输装置的功能有哪些?
    LeetCode 210:课程表 II (拓扑排序)
    Redis最全详解(三)——SpringBoot整合2种方式
    42. 【Android教程】活动:Activity
    Ansible的when语句做条件判断
    java计算机毕业设计济南旅游网站MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/CSDNLHCC/article/details/133800522
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号