算法思路:
1.使用两个指针i、j分别表示无重复子串的首尾索引,指针向右偏移,不会返回
2.使用一个字典记录遍历字符串时,每个字符出现在字符串中的最后位置
3.当未出现重复时,i的值不变;如果出现重复,i的值要向该字符上一次出现的位置的下一个偏移。为了避免i向右偏移,所以i要取,上次字符出现的下一个位置的值,与,之前的i值,的较大值。
class Solution(object):
def lengthOfLongestSubstring(self, s):
char_dict = {} # 保存每个字符最后一次出现的位置
i = 0 # 起始指针
max_length = 0
for j in range(len(s)): # 目前字符所在的位置
if s[j] in char_dict: # 如果字符在字典中
i = max(char_dict[s[j]] + 1,i)
max_length = max(max_length,j-i+1)
char_dict[s[j]] = j
return max_length