由 26 个小写字母组成的 str,在 str中查找最长连续字符串不相同的子串。
如abcae, 连续子串是bcae
table记录的是字符最近出现的位置;
int maxDiff(char * str){
int table[26] = {-1};
memset(table,-1,sizeof(table));
int loop = 0;
int max_len = 0;
int tmp_len = 0;
int len = strlen(str);
table[str[0] - 'a'] = 0;
max_len = 1;
tmp_len = 1;
for (int i = 1; i < len ;++i) {
int last = table[str[i] - 'a'];
if (last == -1) {
tmp_len++;
}
else if (i - tmp_len > last) {
tmp_len++;
}
else {
tmp_len = i - last;
}
table[str[i] - 'a'] = i;
if (max_len < tmp_len)
max_len = tmp_len;
}
return max_len;
}
int main()
{//3*2
char *a = "abcae";
cout<<maxDiff(a)<<endl;
return 0;
}