class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
res = 0
if s is None or len(s) == 0:
return res
d = {}
tmp = 0
start = 0 # 初始化无重复字符子串的开始位置
for i in range(len(s)):
# 若在字典 d 中查询到当前字符 且 此字符的最近位置在start之后,则表示已有重复串
if s[i] in d and d[s[i]] >= start:
start = d[s[i]] + 1 # 更新的重复串的开始位置
tmp = i - start + 1 # 计算当前重复串的长度,并保证重复串长度至少为 1
d[s[i]] = i #(重新)保存第 i 个字符的起始位置,用于下次计算重复串
res = max(res, tmp) # 比较当前重复串长度和历史最大重复串长度,以更新最大重复串长度
return res
# 返回无重复字符的最长子串
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if s is None or len(s) == 0:
return ''
d = {}
tmp = 0
start = 0 # 初始化无重复字符子串的开始位置
for i in range(len(s)):
# 若在字典 d 中查询到当前字符 且 此字符的最近位置在start之后,则表示已有重复串
if s[i] in d and d[s[i]] >= start:
start = d[s[i]] + 1 # 更新的重复串的开始位置
tmp = i - start + 1 # 计算当前重复串的长度,并保证重复串长度至少为 1
d[s[i]] = i #(重新)保存第 i 个字符的起始位置,用于下次计算重复串
# 比较当前重复串长度和历史最大重复串长度,以更新最大重复串长度
if maxlen < tmp:
maxlen = tmp
res = s[start: start+maxlen]
return res