题目:给定一个字符串,请你找出其中不含有重复字符的最长子串 的长度。时间复杂度O(n)
示例一:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例二:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例三:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
思路:
-
本题用“滑动窗口”方法解答。
-
第一步:创建一个容器(注意:创建容器要调用头文件
<vector>
)存储无重复字符的长子串,并创建一个临时变量n
储存容器的长度,创建一个变量MaxSize
储存无重复字符的最长子串的长度。
#include<vector>
vector<char> test; //创建一个容器
int MaxSize(0), n(1);
- 第二步:容器每新增加一个字符,建立一个
for循环
,判断该字符在容器中是否重复,若不重复,临时变量n++
,若重复,则用容器删除方法erase()
删除从容器的第一个元素到该重复元素。并且n
的值要减去删除子串的长度,被删除字串的长度刚好该重复元素的下标值。 - 例如:容器中若储存的元素为
"abcdefg"
,此时n
的值为7,新增元素为c
,则将容器中的"abc"
删除,剩下"defgc"
;因为原容器中c
的下标为2,此时n