3. 无重复字符的最长子串
2022年10月22日
一、问题描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
二、问题分析
- 算法思路如下:
- 算法流程:
- 在上述过程中需要判断是否存在重复的字符:
三、解题代码
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
hash_set = set()
right = -1
max_len = 0
for i in range(len(s)):
if i != 0:
hash_set.remove(s[i-1])
while (right+1) < len(s) and s[right+1] not in hash_set:
hash_set.add(s[right+1])
right += 1
max_len = max(max_len, len(hash_set))
return max_len
总结
使用滑动窗口解决该题,同时使用哈希集判断是否存在重复的字符。