欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

无重复字符的最长子串

程序员文章站 2022-10-03 10:14:27
给定一个字符串,找出不含有重复字符的 最长子串 的长度。 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。 给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。 给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子 ......

参考别人解答重复做
memset函数是按一个字节一个字节来给数组或者是结构体赋值的,
但需要注意的是给int型的数组复制时的几点注意:

一般常用的复制方式有:

int a[MAXN];
memset(a, 0, sizeof(a));//数组中的所有元素全为0
memset(a, -1, sizeof(a));//数组中的所有元素全为-1
/*////////
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
*/////////
int lengthOfLongestSubstring(char * s){
    int hash[128],start=0,count=0,max=0;
    int i;
    memset(hash,0,sizeof(hash));
    for(i=0;s[i]!='\0';i++)
    {
        if(hash[s[i]]>start)//检测在重复字符出现时hash表,即使出现在后续位置,hash再判断时肯定比新开始字符段start大
        {
            count=i-start;
            if(count>max)
            max=count;
            start=hash[s[i]];//更新初始值,在重复字符向后移动1位,由于在hash赋值时i+1,对应字符数组s[i+1]
        }
         hash[s[i]]=i+1;//与i=0时区分,所以这里加1,对应实际第几位
         //字符未重复时将hash[s[i]]赋值
    }
    count=i-start;

    return count>max?count:max;
}

本文地址:https://blog.csdn.net/qq_40416375/article/details/107895117

相关标签: leetcode hash