LeetCode第3题,无重复字符的最长子串

以下是源自大佬的代码,本废物用了2个小时终于看明白是啥意思了。分享出来

int lengthOfLongestSubstring(char * s){
    int i, j = 0, count = 0, max = 0, index[128] = {0}, start = 0;
    //i是遍历数组的,j没用到,count用来计数每个没有重复字符串的长度,
    //max用来标记count的最大值,start用来标记没有重复字符的字符串的第一个位置
    //index用来标记字符出现的位置的下一个位置,
    for(i=0;s[i]!='\0';i++)     //正常遍历
    {
        if(index[s[i]]>start)   //index用来储存出现重复字符时//出现重复进入这里
        {                       //子串起始下标应移动到的地方
            count = i-start;//统计当前不重复字符个数
            if(count>max)
            {
                max = count;
            }
            start = index[s[i]];//初始位置开始后移!!!
        }
        index[s[i]] = i+1;//这一步是灵魂,存储每个不重复字符的下一个位置,
        //当后面再次出现该字符时,存储标记赋值给start,之后存储当前重复字符的
        //下一个位置
    }
    count = i-start;//最后一次计数与最大计数的比较
    return count>max?count:max;
}

作者:wu-sheng-23
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/cyu-yan-shuang-yi-bai-by-wu-sheng-23/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值