leetcode无重复字符最长子串

题目

找到一个字符串当中没有重复的最长子串

思路

滑动窗口(不是计算机网络的滑动窗口协议),大致的思路是,设置一个头指针,一个尾指针,然后两者都从链表或者数组的头结点开始向下,我们先开始向右增加尾指针,当尾指针递增一次,我们检查子串之间是否存在重复的字符,如果是的话,那就把头指针指向重复字符的后面一个位置,随之更新当前的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;
    }
};
posted @ 2021-04-09 21:59  Marvel_Iron_Man  阅读(29)  评论(0编辑  收藏  举报