题目
找到一个字符串当中没有重复的最长子串
思路
滑动窗口(不是计算机网络的滑动窗口协议),大致的思路是,设置一个头指针,一个尾指针,然后两者都从链表或者数组的头结点开始向下,我们先开始向右增加尾指针,当尾指针递增一次,我们检查子串之间是否存在重复的字符,如果是的话,那就把头指针指向重复字符的后面一个位置,随之更新当前的max_len的长度,结束当前子循环。如果不是的话,那就继续递增尾指针。依次这样知道我们的尾指针到达数组或者链表的尾部,整个循环结束。
AC代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len = s.size();
int start = 0,end = 0;
int max_len = 0,res = 0;
while(end < len){
char limit = s[end];
for(int i = start; i < end; i++){
if(s[i] == limit){
start = i+1;
max_len = end-start;
break;
}
}
end++;
max_len++;
res = max(res,max_len);
}
return res;
}
};