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

文章目录

    • 题目
    • 题解
      • [1. 暴力求解+集合](#1. 暴力求解+集合)
      • [2. 滑动窗口](#2. 滑动窗口)

题目

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

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

示例 1:

输入: s = "abcabcbb"

输出: 3

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

示例 2:

输入: s = "bbbbb"

输出: 1

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

示例 3:

输入: s = "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

题解

1. 暴力求解+集合

python 复制代码
在这里插入代码片class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if len(s) == 0:
            return 0
        # 暴力求解
        result = 0
        n = len(s)

        for i in range(n):
            seen = set()
            lenth = 0 
            for j in range(i, n):
                if s[j] not in seen:
                    seen.add(s[j])
                    lenth += 1
                else:
                    break
            result = max(result, lenth)
        return result

        

2. 滑动窗口

python 复制代码
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 使用一个集合来记录当前窗口内的字符
        char_set = set()
        left = 0  # 窗口的左边界
        max_len = 0  # 记录最长子串的长度

        for right in range(len(s)):
            # 如果字符已经在集合中,移动左边界
            while s[right] in char_set:
                char_set.remove(s[left])  # 移除左边界的字符
                left += 1  # 将左边界向右移动
            
            # 将当前字符加入集合
            char_set.add(s[right])
            # 更新最长子串长度
            max_len = max(max_len, right - left + 1)

        return max_len


        
相关推荐
imbackneverdie30 分钟前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校
闪电悠米1 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t1 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
wabs6661 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
CHANG_THE_WORLD1 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
测试老哥2 小时前
接口自动化测试分层设计与实践总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
风栖柳白杨3 小时前
【面试】职位要求_准备
面试·职场和发展
geovindu3 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
微露清风3 小时前
模拟算法学习记录
学习·算法
KaMeidebaby4 小时前
卡梅德生物技术快报 | abcore 纳米抗体文库:从PNAS论文看纳米抗体理性设计:构象熵作为亲和力预测新指标的技术实现
java·开发语言·人工智能·算法·机器学习