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.
提交了无数次,最后终于过了,唉。。。。
用一个字典记录字符出现的位置。 用滑动窗口的思想,[i,j]区间保证是无重复子串,j往后加。如果s[j]已经在字典中记录过,位置为j',则i往后滑至j‘+1处,依然j往后滑直至等于字符串长度n。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
n = len(s)
d = dict()
i,j = 0,0
ans = 0
while i<n and j<n:
if d.has_key(s[j]):
i = max(d[s[j]]+1,i)
ans = max(ans, j-i+1)
d[s[j]] = j
j += 1
return ans