def length_of_longest_substring(str):
start = maxLength = 0
usedChar = {}
for i, char in enumerate(str):
if char in usedChar and start <= usedChar[char]:
start = usedChar[char] + 1
else:
maxLength = max(maxLength, i - start + 1)
usedChar[char] = i
return maxLength
if __name__ == '__main__':
str = 'ajfdklserjkewrjlkewaaabbbbddkkkkf'
print(length_of_longest_substring(str))
-
定义一个函数
length_of_longest_substring
,它接受一个字符串str
作为参数。 -
在函数内部,初始化三个变量:
start
:用来记录当前不重复子字符串的起始位置,初始值为0。maxLength
:用来记录最长不重复子字符串的长度,初始值为0。usedChar
:一个字典,用来记录每个字符最近一次出现的位置。
-
使用
enumerate
函数遍历字符串str
。enumerate
函数会返回字符串中每个字符及其索引。 -
对于字符串中的每个字符
char
:- 如果
char
已经在usedChar
字典中,并且它的位置大于或等于start
,则更新start
的值为usedChar[char] + 1
。这表示从下一个位置开始寻找新的不重复子字符串。 - 否则,计算当前不重复子字符串的长度(
i - start + 1
),并与maxLength
比较,取较大值作为新的maxLength
。
- 如果
-
更新
usedChar
字典,将当前字符char
的位置设置为i
。 -
遍历结束后,返回
maxLength
,即最长的不重复子字符串的长度。
通过这种方式,代码能够找出字符串中最长的连续不重复子字符串的长度。