著作権ます。https://blog.csdn.net/CAIYUNFREEDOM https://blog.csdn.net/CAIYUNFREEDOM/article/details/91420216
https://leetcode.com/problems/longest-substring-without-repeating-characters/solution/
最長のサブの長さを含む文字列を考えると重複する文字列を特定していません。
例:
「ABC」の文字の最長の部分文字列を繰り返すことなく、「abcabcbb」で考えると、その長さは3です。
「BBBBB」を考えると、最も長い部分文字列は、長さが1である、「B」です。
「pwwkew」を考えると、それは最長の部分文字列「WKE」、長さ3です。答えは部分文字列でなければならないことに注意してください、「pwkeは」ではなく、サブストリングのサブシーケンスです。
問題解決のためのアイデア
各文字列を歩きます。
ANS結果を保存します。
jは、現在のトラバーサル文字インデックスを表します。ディクショナリに格納された最後の出現のI-1 = S [j]の位置、。
例えば、他の2つのC-Cと、重複する文字が存在しません。
.... C ........ C .....
二番目の文字に電流J Cトラバース。次に、I =(+1の最初のインデックスC)。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
ans = 0
dic={}
i=0
j=0
for e in s:
if dic.has_key(e):
i = max(i, dic[e])
ans = max(ans, j-i+1)
j+=1
dic[e]=j
return ans