关键(找出重复的那个下标for j, c in enumerate(s),s[i:j].index©)
for j, c in enumerate(s):
if c in s[i:j]:
l = max(l, len(s[i:j]))
i += s[i:j].index(c) + 1 #找到重复的那个下标
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: str) -> int:
i = j = l = 0
for j, c in enumerate(s):
if c in s[i:j]:
l = max(l, len(s[i:j]))
i += s[i:j].index(c) + 1 #找到重复的那个下标
return max(l, len(s[i:j+1]))
"""考虑不周全,找到重复的那个下标,之后的再开始计算
Input"dvdf"
Output 2
Expected 3
"""
"""
r=[]
list=[]
for k in s:
list.append(k)
len1=len(list)
len2=0
for i in range(len1):
if list[i] not in r:
r.append(list[i])
if len(r)>len2:
len2=len(r)
else:
r=[]
r.remove(s[:])
r.append(list[i])
return len2"""