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第三题 无重复的最长字串的主要内容,如果未能解决你的问题,请参考以下文章