Given a string, find the length of the longest substring without repeating characters.
Examples:
Given “abcabcbb”, the answer is “abc”, which the length is 3.
Given “bbbbb”, the answer is “b”, with the length of 1.
Given “pwwkew”, the answer is “wke”, with the length of 3. Note that the answer must be a substring, “pwke” is a subsequence and not a substring.
我的思路就是从头依次向后看,使用窗口的思想,在字符串类的题目中经常用到。如果发现一样的字母,就移动窗口至两个相似字母中的前一个的下一个位置。
在这个过程中,查找是否有一样的字母时,可以采用hash表的方式,降低复杂度。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max = 0
start = 0
set = {}
for i in range(len(s)):
set[s[i]] = -1
for i in range(len(s)):
if set[s[i]] != -1:
while start <= set[s[i]]:
set[s[start]] = -1
start += 1
set[s[i]] = i
if i - start + 1 > max:
max = i - start + 1
return max