C语言程序,无法进入被调函数(至少是无法打印),以及其他问题

在力扣刷的题:

img

目前的代码:

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