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

描述

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

示例 1:

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

链接

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

思路

使用集合保存已经遍历的字符。

从头开始遍历,遇上遍历过的(判断是否存在于集合中),先计算子串长度并更新最长子串,然后从集合中移除相关元素,同时更新字符串的起始位移和当前字符串的长度。

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        strs = set()
        count = 0
        left = 0
        maxcount = 0
        for i in range(len(s)):
            if s[i] not in strs:
                strs.add(s[i])
                count = count + 1
            else:
                maxcount = max(maxcount, count)
                while s[left] != s[i]:
                    strs.remove(s[left])
                    left += 1
                    count = count -1
                left = left + 1
        maxcount = max(maxcount, count)
        return maxcount

   转载规则


《3. 无重复字符的最长子串》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
多阶段构建 多阶段构建
引入 在构建镜像过程中,我们可能只需要某些镜像的产物,比如在运行一个go程序需要先go程序包编译后才运行,如果在一个镜像里面完成,先要经过安装编译环境,程序编译完再安装运行环境,最后运行程序,这样的镜像体积往往比较大,不利于我们使用。而真正
2021-06-07
下一篇 
53最大自序和 53最大自序和
描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的
2021-06-05
  目录