在力扣刷的题:
目前的代码:
int lengthOfLongestSubstring(char * s){
int length = strlen(s);
int i = 0;
int j = 0;
int k = 0;
int max = 0;
int flag = 0;
if (length == 1)
{
max = 1;
return max;
}
for(i = 0; i < length-2; i++) //左指针
{
for(j = i+1; j < length-1; j++) //右指针
{
if (s[i] == s[j])
break;
for (k=i; k<j; k++) //内指针
{
printf("%d", k);
flag = 1; //提示进入过比较循环
if(s[k] == s[j])
goto LH;
}
}
LH: ;
int p = max; //防止max值被更小者取代
max = max<j-i? j-i:max;
printf("max = %d,", max);
if (flag == 1 && s[k] == s[j] && max > p)
max = max -1;
}
return max;
}
结果:无论用例,返回值为0。
曾经的代码:
①没有goto,在第三层for最后是if(s[k]==s[j]) break;,测试用例“abcabcbb”,返回值3;用例“pwwekw”,返回值5。
②没有goto,在第三层for最后是if(s[k]==s[j]) break;,使内指针不再检测重复,第三层结束后在第二层末尾紧接着重复if(s[j]==s[k]) break;,使外指针不再增加。无论用例,返回值0。
是你忘记删除那两条printf语句了吧,另外你这个代码还有其他bug,有的数据比如“aa”就通不过
int lengthOfLongestSubstring(char * s){
int length = strlen(s);
int i = 0;
int j = 0;
int k = 0;
int max = 0;
int flag = 0;
if (length == 1)
{
return 1;
}
for(i = 0; i < length-2; i++) //左指针
{
for(j = i+1; j < length-1; j++) //右指针
{
if (s[i] == s[j])
break;
for (k=i; k<j; k++) //内指针
{
flag = 1; //提示进入过比较循环
if(s[k] == s[j])
goto LH;
}
}
LH: ;
int p = max; //防止max值被更小者取代
max = max<j-i? j-i:max;
if (flag == 1 && s[k] == s[j] && max > p)
max = max -1;
}
return max;
}
不建议用goto