题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
解法一
我自己的解法,耗时太长
代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if len(s)==0:
return 0
ls = list(s)
if len(set(ls))<len(ls):
lenth = len(set(ls))+1
else:
lenth = len(ls)
for i in range(lenth,0,-1):
for j in range(0,len(ls)-i+1):
if len(ls[j:j+i]) == len(set(ls[j:j+i])):
return i
解法二
滑动窗口
代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
i,lenth= -1,0
dic={}
for j in range(len(s)):
if s[j] in dic:
i=max(dic[s[j]],i)
dic[s[j]]=j
lenth = max(j-i,lenth)
return lenth
这里参考的力扣的这份解答,有滑动窗口的动画,很形象
https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/2361797/3-wu-zhong-fu-zi-fu-de-zui-chang-zi-chua-26i5/