无重复字符的最长子串
程序员文章站
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