题目:Given a string, find the length of the longest substring without repeating characters.
先说说思路,优化的方法在于用一个滑动的窗口[i,j]浏览字符串,先把遇到的字符加入一个字典dic,字符为key,value为最近更新的位置。如果是s[j]存在于是现有的窗口是s[j′]中,则可以跳过i到j′的字符串。细节注释见代码。
#!/usr/bin/env python
# encoding: utf-8
'''
@author: cc
'''
def lengthOfLongestSubstring(s):
"""
:type s: str
:rtype: int
"""
dic={} #key为字符,value为最近更新的位置,存放已经遇到过的字符
i=0
j=0 # i,j之间的字符串是现在浏览的未重复的子串
maxlen=0
for j in range(len(s)):
if s[j] in dic.keys():
i=max(i,dic[s[j]]) #一、新遇到的字符在现在i,j之间的字符串中,;二、未在i,j之中,但在i之前遇到的
dic[s[j]]=j+1 #把遇到的字符放入字典中,存在则更新位置
#加一是因为若新遇到的字符在现在i,j之间的字符串中,则需要更新为之前位置加一;而第二种情况则保持i不变
maxlen=max(maxlen,j-i+1)
return maxlen