给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
'''
python 滑动窗口 list[1:3] 不包括右端,左闭右开
'''
str_list = list(s)
i, j = 0, 0
n = len(str_list)
max_length = 0
tem_length = 0
while i < n and j < n:
if not str_list[j] in str_list[i:j]:
j += 1
tem_length = j - i
if max_length <= tem_length:
max_length = tem_length
else:
# i += 1 最右端的字母如果在当前滑动窗口中,
# 则左指针指向该字母在窗口中的位置的下一个 +1
i = str_list[i:j].index(str_list[j])+i+1
return max_length