无重复字符的最长子串

参考别人解答重复做
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;
}

你可能感兴趣的:(leetcode,hash,leetcode)