题目来源:链接
题目描述:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为3
代码实现:
def lengthOfLongestSubstring(self, s: str) -> int:
dic = {}
res,tmp = 0,0
for j in range(len(s)):
i = dic.get(s[j],-1)
dic[s[j]] = j
tmp = tmp+1 if tmp < j-i else j-i
res = max(res,tmp)
return res
解题思路:
获取元素上一次出现的位置(下标),如果是第一次出现则为-1
更新元素的位置,
那么这次出现的位置-上次出现的位置,这中间都是不重复的,也就是不含重复字符的长度
状态定义:tmp是到当前元素的最长子字符串长度
转移方程:tmp = tmp +1 if tmp <j-i else j-i