LeetCode千題斬之3:Longest Substring Without Repeating Characters(最長不重複子串)
阿新 • • 發佈:2018-12-11
題目: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