用next陣列來匹配模擬串的演算法

2021-07-30 04:55:40 字數 707 閱讀 5569

題目描述:輸入乙個n,表示有n組樣例,每個樣例有兩個字串,先輸入主串,在輸入模擬串和位置pos,如果在主串第pos之後能匹配成功就輸出yes和模擬串的位置,否則就輸出no

#include

#include

int next[1000];

void makenext(char ch, int m)//next陣列的作用是:當第j個字元匹配失敗是,將主串中的第i個(原本和j匹配)和next[j]匹配,當然next陣列的建立過程已經體現了最大程度的減小時間複雜度

if(next[i]==0)

else

}int nextval[1000];

nextval[1]=0;

for(j=2;j<=m;j++)

if(next[i]==0)

else}}

int main()

if(next[i]==0)

else

}int nextval[1000];

nextval[1]=0;

for(j=2;j<=m;j++)

if(next[i]==0)

else

}for(i=1;i<=m;i++)}

2:模擬串的移動:

int i=0;j=0;//m代表模擬串的字元數,n代表主串的字元數

while(ielse

}if(j==m)

else

串 KMP模式匹配演算法(next陣列)

include include include void get next char t 100 int next int index kmp char s 100 char t 100 int pos int main void get next char t 100 int next else ...

手算KMP匹配的Next值和Nextval值

kmp 演算法我們有寫好的函式幫我們計算 next 陣列的值和 nextval 陣列的值,但是如果是考試,那就只能自己來手算這兩個陣列了,這裡分享一下我的計算方法吧。計算字首 next i 的值 我們令 next 0 1 從 next 1 開始,每求乙個字元的 next 值,就看它前面是否有乙個最長...

手算KMP匹配的Next值和Nextval值

kmp 演算法我們有寫好的函式幫我們計算 next 陣列的值和 nextval 陣列的值,但是如果是考試,那就只能自己來手算這兩個陣列了,這裡分享一下我的計算方法吧。計算字首 next i 的值 我們令 next 0 1 從 next 1 開始,每求乙個字元的 next 值,就看它前面是否有乙個最長...