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;
}

猜你喜欢

转载自www.cnblogs.com/endevelop-gw/p/12508116.html
今日推荐