一. 题目
- 题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 - 示例
二. 方案一: 滑动窗口
-
解题思路
- 循环遍历整个字符串
- 如果遍历的字符不在之前的子串中, 则将该字符继续加在子串中
- 如果遍历的字符在之前子串中已经存在, 则将子串修改为原子串重复字符之后到新字符这一段
- 每添加一个字符就判断是否超过之前子串的最长长度, 超过就修改最长长度
- 遍历完之后得到的长度即为之春的最长长度
-
解题代码
def lengthOfLongestSubstring(self, s: str) -> int: index = 0 length = len(s) max1 = 0 l = 0 while index < length: # str1 表示子串 str1 = s[l: index] # 如果新遍历的字符在子串中 if s[index] in str1: # 获取原子串中该字符的位置 # 这里加1的原因是: 新子串应该在查询到的位置下一个索引开始 l = s.index(s[index], l, index) + 1 # 获取当前子串的长度 s1 = index - l + 1 if s1 > max1: max1 = s1 index += 1 return max1
-
分析
时间复杂度: O(0)
空间复杂度: O()