给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。python
时间: 2023-06-20 14:03:35 浏览: 113
可以使用滑动窗口的思想来解决这个问题。
具体来说,我们维护一个窗口,用来表示当前的子串。窗口的左边界和右边界分别为 left 和 right ,初始值均为 0 。
我们先将右边界 right 向右移动,如果当前子串中没有重复字符,则继续扩大窗口,否则我们需要缩小窗口,移动左边界 left ,直到子串中不再有重复字符为止。在移动左边界的过程中,我们需要记录当前子串的长度,并更新最长子串的长度。
下面是 Python 代码实现:
```
def lengthOfLongestSubstring(s: str) -> int:
n = len(s)
if n <= 1:
return n
# 用字典来记录每个字符最后一次出现的位置
char_index = {}
left, right = 0, 0
max_len = 0
while right < n:
# 如果当前字符已经出现过,则需要缩小窗口
if s[right] in char_index and char_index[s[right]] >= left:
left = char_index[s[right]] + 1
char_index[s[right]] = right
max_len = max(max_len, right - left + 1)
right += 1
return max_len
```
时间复杂度为 O(n),空间复杂度为 O(min(n, m)),其中 m 为字符集大小。
阅读全文