码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-17 08:41:20      阅读:32      评论:0      收藏:0      [点我收藏+]

标签:字符   ges   lock   else   string   length   break   等于   etc   

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

主要采用滑动窗口法。
以字串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第三题 无重复的最长字串

标签:字符   ges   lock   else   string   length   break   等于   etc   

原文地址:https://www.cnblogs.com/endevelop-gw/p/12508116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!