第三题:(网上借鉴)滑动窗口问题
(最快的是8ms,但是我提交一模一样的代码也只有12ms)
1.边界情况:
无
2.思路:
其中有个小规律,例如字符串 pwwkewasd
在字符串不断向后遍历的过程中如果遇到已经遍历的字符,那么这个字符串从开始遍历到重复字符所组成的子字符串长度就是以开始字符为头部的最长的无重复字符串(Substring Without Repeating ),把子字符串中重复字符前的字符删除从子字符串外重复字符开始继续遍历,以此往复求得最长无重复字符串(Longest Substring Without Repeating)。
遍历pwwkewasd
p
pw
w 在这里w重复所以以p为首的无重复字符串长度为2 删除pw 加入重复字符(也可以下一步在加,无所谓)
wk
wke
kew
kewa
kewas
kewasd
其中长的为6 即为所求
算法代码
int lengthOfLongestSubstring(string s) {
long long i = 0;
int j = 0,max = 0,len = 0;
string str;
while (j < s.size()){
i = str.find(s[j]);
if (i != string::npos){
str.erase(0,i + 1);
if (len > max)
max = len;
len = len - i - 1;
}
str = str + s[j];
len++;
j++;
}
if (len > max)
max = len;
return max;
}
-------wang
-------568551096@qq.com