题目描述:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长 子串 的长度
输入输出实例:
思路:对于这道题目,思路就是建立一个空的列表或者字典来存储子数组,遍历这个字符串数组,如果字符在列表或者字典中,我们就需要看怎么更新我们的起始下标,然后怎么更新我们的长度,我用的是字典,如果字符在字典中,start = max(start,char_index_map[char]+1),需要考虑一下当前的起始下标大还是字符在上次出现的位置+1大,我们取更大的那个当作我们的起始下标,然后比较当前的max_len和当前的末尾下标-起始下标+1哪个大,我们取大的那个。根据上述思路和算法有以下代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n = len(s)
if n==0 or n==1:
return len(s)
else:
char_index_map = {}
start = 0
max_len = 0
for end,char in enumerate(s):
if char in char_index_map:
start = max(start,char_index_map[char]+1)
char_index_map[char] = end
max_len = max(max_len,end-start+1)
return max_len
如果要问我们具体的最长字符是什么,只需要在最后一步加一点,然后提前放一个空字符串用来保存就好了(strs = ‘’):
if end - start +1 > max_len:
max_len = end - start +1
strs = s[start:end]
最后成功通过了