要求:
给定一个字符串 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
循环数据展示
| 循环 | start | end | result | mapSet |
|---|---|---|---|---|
| 第一次循环 | 0 | 0 | 1 | mapset[p]=1 |
| 第二次循环 | 0 | 1 | 2 | mapset[w]=2 |
| 第三次循环 | 2 | 2 | 2 | mapset[w]=3 |
| 第四次循环 | 2 | 3 | 2 | mapset[k]=4 |
| 第五次循环 | 2 | 4 | 3 | mapset[e]=5 |
| 第六次循环 | 3 | 5 | 3 | mapset[w]=6 |
最终返回result = 3