1、题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"所以其长度为 3。 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
2、分析
使用一个概念滑动窗口, 也就是新建立一个列表,通过这个列表去遍历字符串,当遇到存在的值时,判断滑动窗口中的存在目标的index,保存其长度,然后利用切片保存[index+1:]。
3、代码
def LongString(s):
l = [] # 滑动窗口
ans = [] # 存储结果
for i in s:
if i not in l: # 一直判断直到找到重复值
l.append(i)
else:
ans.append(len(l))
index = l.index(i)
l = [index + 1 :] # --- > 关键是在滑动窗口中切片
l.append(i)
ans.append(len(l))
return max(ans) if ans else 0
4、结果
执行用时 :68 ms, 在所有 python3 提交中击败了81.02% 的用户
内存消耗 :12.9 MB, 在所有 python3 提交中击败了99.39%的用户
5、改进
目前存在的问题,可能是空间复杂度感觉比较高,因为在使用内存方面,有新建立了两个额外的列表,考虑使用字典进行改进。
望您:
“情深不寿,强极则辱,谦谦君子,温润如玉”。