分析:
乙個長度為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...