问题
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
解答
滑动窗口:定义空集合,之后左边i
先固定,右边j
向右走,判断集合中是否存在j
所对应的字符,若不存在,则添加,且j++
,同时最长子串长度也更新;
若集合中已存在j
所对应的字符,则集合移除左边i
对应的字符,i++
向右走一步。
复杂度分析:
- 时间复杂度:$O(n)$
- 空间复杂度:$O(min(m, n))$,需要$O(k)$的空间大小,
k
为集合的大小,同时集合的大小取决于字符串长度n
和字符集的大小m
。