滑动窗口
1、设置start和end指针,start指向无重复字符串的第一个字符,end指向无重复字符串的最后,并且一直向后移动
2、end指针每次向后移动一次后,使用for循环遍历看start和end之间的字符有没有和end新指向的字符相同,若有则将start指针移动到相同字符的后面,并更新此时的无重复字符串长度
3、记录无重复字符串长度为num=end-start,取最大值
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int result=0; //记录最大长度
int num=0; //记录当前无重复字符串的长度
int len=s.size();
int start=0; //无重复字符串的开头
int end=0; //无重复字符串的结尾
//s[start,end) 前面包含 后面不包含
while(end<len){
char ch=s[end];
for(int i=start;i<end;i++){
if(s[i]==ch){ //遇到重复的字符则将start变成重复字符的下一个
start=i+1;
num=end-start; //更新此时的字符串长度
break; //找到重复字符并更新start,不需要再循环,所以break
}
}
end++; //end指针往后移
num++; //字符串长度+1
result=max(num,result); //将之前和当前的字符串长度作比较,取最大值
}
return result;
}
};