emmmmm,我用的应该是滑动窗口吧
int lengthOfLongestSubstring(char* s)
{
int max = 0 ;
int num = 1;
int i,j,k;
char *STmp;
char SSTmp[2] = {'\0','\0'};
if (*s == '\0')
{
return 0; //如果是空字符串就返回0
}
if (sizeof (s) == 3)
{
if (*s == *(s + 1))
{
return 2; //如果是两个不相同字符就返回2
}
}
for (i = 0; s[i] != '\0'; i++); //统计字符串有多长
STmp = (char *)malloc(i*sizeof(char)); //开辟与输入字串相同的空间
for ( i = 0; s[i] != '\0'; i++) //初始化刚开辟的空间,置为‘\0’
{
STmp[i] = '\0';
}
for (i = 0; s[i] != '\0'; i++)
{
num = 1; //重置计数变量
for (k = 0; STmp[k] != '\0'; k++) //初始化开辟的空间,置为‘\0’
{
STmp[k] = '\0';
}
for ( j = i; s[j + 1] != '\0'; j++)
{
STmp[j - i] = s[j]; //(j-i)是为了从数组第一位开始赋值
SSTmp[0] = s[j + 1]; //下一个字符(SSTmp[0])
if (!strstr((const char*)STmp,(const char*)SSTmp)) // 下一个字符(SSTmp[0])与当前录入到STmp的字串对比,无重复计数变量+1
{
num++;
}
else
{
max = max > num ? max : num;
break;
}
max = max > num ? max : num;
}
}
return (max > num) ? max : num;
}
有些地方确实比较蛋疼,比如我用了个变量来计数,而不是最后统计字符串长度。