这道题目主要考察对字符串的理解

首先是我自己解题,写的太过复杂效率很低,虽然能运行成功但是运行速度低而且占用内存也挺大,这里可以当做反面教材了,以后写代码能优化尽量优化
int lengthOfLongestSubstring(char* s)
{
char* p1 = s;
char* p2 = s;
int j = strlen(s);
int count = 0;
int max = 0;
int flag = 1;
int num = 0;
while (j--)
{
while (*(++p1) != *s && flag && *p1 && ++num)
{
count++;int i = 0;
for(i=0;i<num-1 && flag;i++)
{
if (*(s + i) == *p1)
flag = 0;
}
}
p1 = p2+1;
p2+=1;
flag = 1;
if (count >= max)
{
max = count + 1;
}
count = 0;
}
return max;
}
然后去看了其他人的解题思路,的确很清晰,代码也很简洁,这里我们先分析一个

定义left和right,left代表最长字串的第一个字母,而right的作用就是计算字串长度。逐步分析的话就是先计算字符串长度,然后循环len次,定义一共标识变量same,通过赋值的形式来判断是否有重复字符,如图,当s[j]== s[right],就意味着有重复字符了,然后让left=j+1,再保存遇到重复字符前的长度,存储在max中,right-left+1就意味着两者之间字符串的长度,left = j+1意思就是从重复字符的下一个再进行以上计算。