[LeetCode]3. Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating Characters
dp[i] = max(dp[i-1], 从重复位置开始计算的子串长度) (if 重复)
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
dp = [0] * len(s)
dp[0] = 1
start = 0
used_char = {s[0]: 0}
for i in range(1, len(s)):
if s[i] in used_char:
start = max(start, used_char[s[i]] + 1)
dp[i] = max(dp[i - 1], i - start + 1)
used_char[s[i]] = i
return dp[len(s) - 1]
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
start = 0
l = len(s)
usedchar = {}
max_len = 0
for i in range(l):
# 存在,并且保证上一个的位置需要比起始的位置后面
if s[i] in usedchar and usedchar[s[i]] >= start:
start = usedchar[s[i]] + 1
else:
max_len = max(max_len, i - start + 1)
usedchar[s[i]] = i
return max_len
关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法