题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
能力有限先用暴力解决法,别的方法待续更新
此题可设置两个变量,一个是开始的 k(即起始字母),另一个是要寻找的相同字母 j (即终止字母);
当相同时,移动 i 到 k+1 的位置(下次遍历 i 只需从k+1 开始即可)
for(k=i;k<j && s[k]-s[j];k++);
最后比较max 和 (j-i+1 )的大小即可。
下面是代码附上
欢迎讨论
int lengthOfLongestSubstring(char* s) {
int length=0,m=0;
for(;s[m]!='\0';m++)
{
length++;
}
if(length==0)
return 0;
int max=1,j=1,k,i=0;
while(j<length)
{
//找到 i到j之间相同的位置
for(k=i;k<j && s[k]-s[j];k++);
//找到相同的值 移动i
if(k!=j)
{
i=k+1;
}
//判断MAX的最大值
max=max>j-i+1?max:j-i+1;
j++;
}
return max;
}