给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。
关键:利用一个dict记录每个字母出现的最后位置,再利用一个start记录最靠右的重复点
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
_max, start, d = 0, 0, {}
for i, _s in enumerate(s):
if _s in d and d[_s] >= start:
start = d[_s] + 1
d[_s] = i
_max = max(_max, i - start + 1)
return _max
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
longestLen = 0
i = 0
j = 0
hashMap = {}
for j in range(len(s)):
if s[j] in hashMap.keys():
i = max(hashMap[s[j]], i)
longestLen = max(longestLen, j - i + 1)
hashMap[s[j]] = j + 1
return longestLen