leetcode第三题 无重复的最长字串

Posted endevelop-gw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode第三题 无重复的最长字串相关的知识,希望对你有一定的参考价值。

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

主要采用滑动窗口法。
以字串abcdeabc为例
先考虑a开头的字串,b未重复,count++;c未重复,count++;d未重复,count++……遇到第二个a重复了,break出去,比较sum(起初为0)和count,令sum等于count
这时候该考虑b开头的字串了,我们发现,之前的遍历告诉我们,对于b开头的字串,bcde是没有重复的,我们只需要从下一个a开始考虑。
所以我们在只需要重新标记a(新字串中被舍去的元素,即上一个字串的开头)是“未遇到”的,“bcde”都遇到过,但没有重复,然后从第二个a考虑,然后不断滑动……
用C实现

int lengthOfLongestSubstring(char * s){
    int n=strlen(s);
    int maybe[177]={0};
    int max=0;
    int times=0;
    int last=0;    
    for(int b=0;b<n;b++)
    {for(int i=last;i<n;i++)
    {
        if(maybe[s[i]]==0)
        {maybe[s[i]]=1;
        times++;}
        else
        {   maybe[s[b]]=0;
            last=i;
            break;
        }
    }
    if(max<times)max=times;
    times-=1;
    }
    return max;
    return 0;
}

以上是关于leetcode第三题 无重复的最长字串的主要内容,如果未能解决你的问题,请参考以下文章

leetcode第三题

leetcode算法-中等3. 无重复字符的最长字串

《LeetCode之每日一题》:78.无重复字符的最长字串

[leetcode]3无重复字符的最长字串

LeetCode3:最长不重复字串

leecode第三题(无重复字符的最长子串)