标签:字符 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;
}
标签:字符 ges lock else string length break 等于 etc
原文地址:https://www.cnblogs.com/endevelop-gw/p/12508116.html