leetcode_0003 无重复字符的最长子串

129 阅读1分钟

要求:

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

  • 示例 1:
 输入: s = "abcabcbb"
 输出: 3 
 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
  • 示例 2:
 输入: s = "bbbbb"
 输出: 1
 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
  • 示例 3:
 输入: s = "pwwkew"
 输出: 3
 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
      请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
  • 示例 4:
 输入: s = ""
 输出: 0

详解代码

 class Solution(object):
     def lengthOfLongestSubstring(self, s):
         """
         :type s: str
         :rtype: int
         """
         mapSet = {}
         start, result = 0, 0
 ​
         for end in range(len(s)):
             if s[end] in mapSet:
                 start = max(mapSet[s[end]], start)
             result = max(result, end - start + 1)
             mapSet[s[end]] = end + 1
 ​
         return result

循环数据展示

循环startendresultmapSet
第一次循环001mapset[p]=1
第二次循环012mapset[w]=2
第三次循环222mapset[w]=3
第四次循环232mapset[k]=4
第五次循环243mapset[e]=5
第六次循环353mapset[w]=6

最终返回result = 3

image.png