题目:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
方法一:
可以改用hash/字典
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
max=0
for i in range(len(s)):
a=""
for j in range(i,len(s)):
#判断退出循环的原因,重复还是循环完毕退出
k=0
if s[j] in a:
break
else:
k=1
a+=s[j]
if k==1:
k=j-i+1
else:
k=j-i
if k>max:
max=k
return max
方法二:利用hash表一次遍历,记录重复字符的位置,即使用滑动窗口
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
#记录历史最长子串长度
maxlen=0
if len(s)==0 or s is None:
return maxlen
#记录重复字符起始位置+1
start=0
onelen=0
dic={}
for i in range(len(s)):
if s[i] in dic and dic[s[i]]>=start:
start=dic[s[i]]+1
#记录当前最长子串长度
onelen=i-start+1
#将字符记录
dic[s[i]]=i
maxlen=max(maxlen,onelen)
return maxlen