UVA12012 KMP簡單應用

2021-08-09 13:45:10 字數 790 閱讀 9023

分析:

乙個長度為n的串,問子串是1~n迴圈串的最長長度。

利用kmp演算法可以求出最小迴圈節的長度跟迴圈次數。

如果乙個長度為len的字串,如果 len%(len-next[len])==0&&next[len]!=0就說明字串迴圈 。

迴圈節長度為len-next[len]  迴圈次數為len/(len-next[len])。

本題迴圈串不一定出現在串首,因此要列舉這個串的所有字串,先列舉起點,再列舉長度。 n的規模1000,可以接受n^2的演算法。

對於乙個迴圈串就沿著next陣列更新,因為迴圈節肯定是沿著next陣列的位置跳躍的。

**如下:

#include #include #include using namespace std;

const int maxn = 1005;

char s[maxn];

int next[maxn],ans[maxn];

int t;

int len;

void make_next(char *s, int *next)

void solve(){

int n = strlen(s);

memset(ans,0,sizeof(ans));

for (int i=0; i

KMP簡單應用

kmp簡單應用 time limit 1000ms memory limit 65536k 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長...

KMP簡單應用

給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長度小於1000000 string1和string2中保證不出現空格。對於每組輸入資料,若s...

KMP簡單應用

給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長度小於1000000 string1和string2中保證不出現空格。對於每組輸入資料,若s...