文章目录
- @[toc]
- 题目描述
- 样例输入输出与解释
- 样例1
- 样例2
- 样例3
- 提示
- Python实现
- 滑动窗口
文章目录
- @[toc]
- 题目描述
- 样例输入输出与解释
- 样例1
- 样例2
- 样例3
- 提示
- Python实现
- 滑动窗口
个人主页:丷从心·
系列专栏:LeetCode
刷题指南:LeetCode刷题指南
题目描述
- 给定一个字符串
s
,请你找出其中不含有重复字符的最长子串的长度
样例输入输出与解释
样例1
- 输入:
s = "abcabcbb"
- 输出:
3
- 解释:因为无重复字符的最长子串是
"abc"
,所以其长度为3
样例2
- 输入:
s = "bbbbb"
- 输出:
1
- 解释:因为无重复字符的最长子串是
"b"
,所以其长度为1
样例3
- 输入:
s = "pwwkew"
- 输出:
3
- 解释
- 因为无重复字符的最长子串是
"wke"
,所以其长度为3
- 请注意,你的答案必须是子串的长度,
"pwke"
是一个子序列,不是子串
- 因为无重复字符的最长子串是
提示
0 <= s.length <= 5 * 10^4
s
由英文字母、数字、符号和空格组成
Python实现
滑动窗口
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
char_set = set()
n = len(s)
end, res = 0, 0
for start in range(n):
if start != 0:
# 左指针向右移动一格, 移除一个字符
char_set.remove(s[start - 1])
while end < n and s[end] not in char_set:
# 不断地移动右指针
char_set.add(s[end])
end += 1
res = max(res, end - start)
return res