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

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

示例 1:

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

示例 2:

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

示例 3:

"wke"
"pwke"

🔹设计时间复杂度为O(n)的算法解决问题

🔸解题思路
1.创建一个 Set数据结构numSet
set可以去重避免排序时有重复数字出现
用Set记录字符出现的情况

2.left,right=0,0表示左右指针滑动窗口的边界
ans=0记录无重复最长子串的长度

3.判断当前字符是否在合集中出现
——如果没有在numSet出现过
当前字符加入numSet,更新最长子串长度
——如果在numSet出现过则缩小窗口
把左边界出现过的数去掉
左边界往右滑动,缩小窗口长度

4.最后返回最长子串长度


✨看小破站 UP主红桃A士 动画解说 秒懂
✨金三银四面试准备
✨leetcode hot100

 

     

 

 

复制代码
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        numSet = set()
        left, right = 0, 0
        ans = 0
        while right < len(s):
            if s[right] not in numSet:
                numSet.add(s[right])
                ans = max(ans, right - left + 1)
                right += 1

            else:
                numSet.remove(s[left])
                left += 1
        return ans


if __name__ == '__main__':
    a = Solution()
    s = 'abcabcbb'
    print(a.lengthOfLongestSubstring(s))
复制代码

 

 



posted @   陈晓猛  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-03-12 JZ44 数字序列中某一位的数字
2021-03-12 python学习笔记(四)---函数式编程
2018-03-12 Ubuntu上的相关问题
点击右上角即可分享
微信分享提示