假設字串str的長度為len,則str存在最小迴圈節,迴圈節的長度cyclelen為len-next[len],迴圈子串為str[0…len-next[len]-1]
如果len可以被len - next[len]整除,則表明字串str可以完全由迴圈節迴圈組成
如果不能,說明還需要再新增幾個字母才能補全,需要補的個數cyclelen-len%cyclelen,需要補充的字串為str[len%cyclelen…cyclelen-len%cyclelen]
#include
#include
using
namespace std;
/* str 陣列的 str.length() + 1 個next陣列值 */
void
getnext
(string& str, vector<
int>
& next)
for(
int i =
2, cn =
0; i <= str.
length()
; i++
)else
if(cn ==0)
else}}
intmain()
else
system
("pause");
return0;
}
KMP 迴圈節問題
現在給你乙個字串,請問在該字串末尾最少新增多少個字元,可以讓這個字串獲得重複迴圈序列。輸入 第一行是乙個整數 t 0 t 100 t 0t 0 t 1 00 代表測試資料的組數。之後t tt行每行乙個字串,由小寫字母組成,字串的長度 3 l 100000 3 l 100000 3 l 1 0000 ...
kmp求最小迴圈節
kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成,迴圈週期t len l。2 如果不能,說明還需要...
kmp求最小迴圈節
kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成。迴圈週期t len l。2 如果不能,說明還需要...