解题思路:
1、读懂题目:其中不含有重复字符的 最长子串 的长度。注意最后要求返回的是最长子串的长度。
2、解题思路:采用暴力循环破解法,第一层循环根据字符串i的位置,从零开始;第二层循环(关键),通过j不断往后移动,确保之前的k的字符串都跟j是不同的,如果出现相同的,则断开。i从下个字符从零开始,看看count_max内是否有相同的字符串,如果是的话,再往后移动。
3、此题的逻辑上面确实还是有点复杂的,需要深入的思考和理解,而且很容易出现超时现象。所以算法上还是做了一些优化,避免全部从头开始。
int lengthOfLongestSubstring(char * s){
//方案1:遍历法,优化执行方案。
int len = strlen(s);
int count_max = 0;
int i = 0;
while(i < len-count_max){
int start = i;
int count_tmp = 1;
int j;
for(j = i + 1; j< len; j++){
int k;
for(k = start; k< start+count_tmp; k++){
if(s[j] == s[k]){
break;
}
}
if(k == start + count_tmp){
count_tmp++;
}
else{
i = k;
break;
}
}
count_max = count_max > count_tmp ? count_max : count_tmp;
i++;
}
return count_max;
}