方法一:利用两个变量存储现在找到的不重复的字符串的头和尾位置,然后与后面的一个字符比较。如果后面一个字符不在里面,尾的位置加一;如果后面一个字符在里面,则更新头的位置为后一个字符的前面相同字符的位置的后面的一个,尾位置加一。在循环过程中,存储一个最大长度变量。
class Solution:
def lengthOfLongestSubstring(self,s):
if s=="": return 0
left=0
right=1
maximum=1
for i in s[1:]:
if i not in s[left:right]:
right=right+1
else:
left=s[left:right].index(i)+left+1
right=right+1
if right-left>maximum:
maximum+=1
return maximum
改进:利用哈希表存储元素出现的index,这样可以降低遍历寻找前一个相同元素的index的时间,也可以降低判断index在不在目前子字符串的时间。
class Solution:
def lengthOfLongestSubstring(self,s):
if s=="": return 0
left=0
right=1
maximum=1
temp_dict={s[0]:0}
for i in range(1,len(s)):
if s[i] not in temp_dict:
right=right+1
else:
if temp_dict[s[i]]<left:
right=right+1
else:
left=temp_dict[s[i]]+1
right=right+1
temp_dict[s[i]]=i
if right-left>maximum:
maximum=right-left
return maximum