Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: 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.
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max_ = 0
start = 0
dict_ = {}
for i in range(len(s)):
if s[i] in dict_ and start <= dict_[s[i]]:
start = dict_[s[i]] + 1
else:
max_ = max(i- start + 1, max_)
dict_[s[i]] = i
return max_
别人的用:
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
dct = {}
max_so_far = curr_max = start = 0
for index, i in enumerate(s):
if i in dct and dct[i] >= start:
max_so_far = max(max_so_far, curr_max)
curr_max = index - dct[i]
start = dct[i] + 1
else:
curr_max += 1
dct[i] = index
return max(max_so_far, curr_max)
==================================================================
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
substrings = []
if not s:
return 0
for index, letter in enumerate(s):
if not substrings:
substrings.append(letter)
elif letter in substrings[-1]:
substrings.append(substrings[-1][substrings[-1].index(letter)+1:]+letter)
else:
substrings[-1] += letter
return len(max(substrings, key=len))
数组第一个值a[0],loca=0, 第二个值a[1],addr=1,往后走遇到的第一个和a[0],位置相减是长度。直到遍历完整个string。loca++,addr再遍历完loca+1+1直到尾巴,如此循环。效率是低了些。