描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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