題目:字首中的週期
用nex陣列來表示字串每個字元i的特徵數,即p(0...i-1)中最大的相同字首子串和字尾子串。
對於有i個字元的字串p,有迴圈節的充分必要條件應該是i%(i-nex[i-1)=0,並且迴圈節的個數為i/(i-nex[i-1])。
**如下:
#include#include#include#include#include#include#include#includeusing namespace std;
int nex[1000010];
char a[1000010];
void init_next(int len)
if(a[i]==a[k]) nex[i]=k+1;
else nex[i]=0;
}}int main(){
int len;
int cnt=1;
while(cin>>len && len){
cin>>a;
init_next(len);
printf("test case #%d\n",cnt++);
for(int i=1;i
POJ2406 KMP字首週期
題意 給你乙個字串,長度小於1百萬,問你他最多可以拆成集合相同字串,例如abcabcabc 可以拆成3個abc,所以輸出3.思路 這個是比較常規的next應用,首先假設當前字串長度n 那麼 n next n 字首為最短子串長度,如果n next n 0 n n next n 0,說明最後乙個字串是長...
Openjudge 字首中的週期
運用kmp中的next陣列。字首中如果有週期的話,一定滿足,next i i next i 0.滿足這個條件時 記字串s的第i位之前的子串為p,其字首字串位為p.pre,字尾字串為p.suf,以p i,j 表示p的從i位到j 1的字串。則i就是p的長度,next i 就是p.pre和p.suf的長度...
字首中的週期 非優化KMP演算法的運用
總時間限制 3000ms 記憶體限制 65536kb 描述 乙個字串的字首是從第乙個字元開始的連續若干個字元,例如 abaab 共有5個字首,分別是a,ab,aba,abaa,abaab。我們希望知道乙個n位字串s的字首是否具有迴圈節。換言之,對於每乙個從頭開始的長度為 i i 大於1 的字首,是否...