hellopika 2022-04-14 19:56 采纳率: 66.7%
浏览 23
已结题

力扣第三题:无重复字符的最长子串 想知道哪里出错?

问题遇到的现象和发生背景

力扣第三题:无重复字符的最长子串 求问哪里出错?

img

问题相关代码,请勿粘贴截图
int lengthOfLongestSubstring(char * s){
    int i,j,m,n,k1,k2,k3=0;           //i为子串起始下标
    for(i=0;s[i+1]!='0';i++) //每个元素依次作为子串起始
    {
        for(k2=0;s[k2]!='0';k2++);//使k2等于数组长度
        for(m=i;s[m+1]!='0',m<(k2+i);m++)//检验字符m,从首字符到已知最短长度(k2+i)或最后一位依次循环
        {
            for(j=1,k1=(m-i+1);s[m+j]!='0';j++)
            {
                if(s[m]==s[m+j])
                {
                    break;
                }
                else k1++;//k1保存不含有与检验字符m重复字符的子串长度
            }
            if(k1<k2)
            {
                k2=k1;//k2保存不含有重复字符的子串长度
            }
        }
        if(k2>k3)
        {
            k3=k2;//k3保存不含有重复字符的最长子串的长度
        }
    }
    return k3;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

①一串字符串 从头到尾每个元素依次作为子串的首元素。
②判断以某位元素作为首元素的这个子串的长度,再次(在这个子串中)从头到尾每个元素依次循环,遇到相同的就返回。
③同时记录当前长度,通过k三个变量记录长度来达到传递最终正确长度的效果

我想要达到的结果

虽然可能有更好的办法,但我还是想知道我的这个错在哪里,我无法相信我无法理解,我甚至自己举例子一步步试了,完全没有问题!!令人费解!

  • 写回答

1条回答 默认 最新

  • MGYH 2022-04-15 15:14
    关注

    我是C菜鸡,首先看这个是堆栈信息,应该是if(s[m]==s[m+j]),m+j越界了。
    第二,刚开始学算法,还是多看看题解,没必要自己解,有很多惯用的算法,理解之后在遇到能想到,就是你的东西。从头研究算法,意义不大,我们都是普通人,太费时间,会打击积极性。
    当然不只有题解才是对的,你的思路解不出来,再看题解也很合理。题解看懂,在分析一下你的代码,是超时间限制了,还是边界判断的有问题。
    报错信息,如果分析不对,就得C大佬看看了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月14日