剑指 Offer 48. 最长不含重复字符的子字符串
每日几道leetcode刷刷题!
JZ-Offer48
题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
#滑动窗口(双指针)
if not s:
return 0
max_len = - float('inf') #初始化最大的长度
start = 0 #当重复时,更新strat
marked = set() #标记已遍历过的字符串
for end in range(len(s)):
while start <= end and s[end] in marked:
marked.remove(s[start])
start += 1 #当有重复的元素时,结束,start向前移
max_len = max(max_len, end - start + 1) #计算长度,并比较保存
marked.add(s[end]) 把下一个的字符串保存在marked中
return max_len
总结
滑动窗口,好好品味一下!
类似题目 lc1004