/* 求乙個字串中的最長重複字串 基本思路是利用next陣列來實現
next陣列的定義 就是 字串中第j個字元 必有next[j] - 1個重複
字串, 事實上 kmp查詢 求模式串next陣列 就是指求出模式串j個
字元前 最大的重複子串
#include
#include
#include
#include
#define __in
#define __out
#define __in__out
#define __debug__xu
typedef struct __max_sub
int start;
int len;
int tempstart;
int templen;
}max_sub, *pmax_sub;
int getnext(__out int *next, __in char *substring);
int main(int argc, char **argv)
char *string = "ccccabababab";
char *substring;
unsigned int len, sublen;
int *next;
int i;
int flag = 0;
#ifdef __debug__xu
int j;
#endif
max_sub maxsub = ;
len = strlen(string);
for(i = 1; i < len; i++)
if(string[i] != string[0])
flag = 1;
break;
if(!flag)
printf("string has only one sort of char/n");
printf("%s", string);
return 0;
for(i = 0; i < len; i++)
#ifdef __debug__xu
printf("substring first pos: %d/n", i);
#endif
substring = string + i;
sublen = strlen(substring);
next = (int *)malloc(sizeof(int) * (sublen + 1));
maxsub.templen = getnext(next, substring);
maxsub.tempstart = i;
if(maxsub.templen > maxsub.len)
maxsub.len = maxsub.templen;
maxsub.start = maxsub.tempstart;
#ifdef __debug__xu
for(j = maxsub.start; j < maxsub.len + maxsub.start; j++)
printf("%c", string[j]);
printf("/n");
#endif
free(next);
int getnext(__out int *next, __in char *substring)
char *string;
int k, i;
int max_k;
string = substring;
next[0] = -1;
k = next[0];
i = 0;
max_k = k;
while(i < strlen(substring))
if(i + 1 == strlen(substring) )
if(substring[k] == substring[i])
goto kmp;
if(-1 == k || substring[k] == substring[i])
kmp:
i++;
k++;
next[i] = k;
if (k > max_k)
max_k = k;
else
k = next[k];
#ifdef __debug__xu
for(i = 0; i < strlen(substring) + 1; i++)
printf("next[%d] = %d ", i, next[i]);
printf("/n");
getchar();
#endif
return max_k;
無重複字串的最長字串
無重複字元的最長子串 難度中等 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3...
最長不含重複字串的子字串
一 題目描述 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含 a a z z 的字元。例如,在字串 arabcacfr arabcacfr 中,最長的不含重複字元的子字串是 rabc rabc 或者 acfr acfr 長度為4.二 解題思路 1.採用動態規...
求字串中重複出現的最長字串
求字串中重複出現的最長字串 例如字串 drgabcifrabcsdrrs中,最長公共字串是 abc 方法 利用字尾樹來求。字串的字尾樹有如下 drgabcifrabcsdrrs rgabcifrabcsdrrs gabcifrabcsdrrs abcifrabcsdrrs s1 rabcsdrrs ...