题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
例如:
“abcabcbb” “abc” 长度为3
“bbbbb” “b” 长度为1
“dvdf” “vdf” 长度为3
解析过程,可参见leetcode:力扣
动态规划+哈希表(python的字典),也可以理解为两个指针。
代码:
class Solution:
def func(self , s):
if len(s) == 0:
return 0
elif len(s) == 1:
return 1
save = dict() # 保存每个字母最大的位置,有重复的即时替换
res = 0
j = 0
for i in range(len(s)):
if i == 0:
res = 1
else:
if s[i] not in save.keys():
res += 1
else:
j = save[s[i]]
res = max(res , (i - 1) - j) # 动态方程
save[s[i]] = i
print('i = {} , j = {} , save = {}'.format(i , j , save))
return res
s = Solution()
a = 'abcabcbb'
print(s.func(a))
输出: