KMP字串搜尋

2021-09-30 16:56:57 字數 560 閱讀 3225

#include#include#include#includeusing namespace std;

string a,b;//a為被搜尋字串,b為指定字串。

int nexte[5000];

int next[5001];

void makenext()

//求出前i個字元子串字首與字尾最長的序列數。nextval的求法

next[0] = -1;

for(int i = 1; i < b.length() ; i ++)

next[i] = nexte[i-1];

//為了得到真正的next序列,將nextval右移動一位,然後將陣列第乙個元素改為-1.

}int kmp()//kmp演算法,尋找是否存在指定字串,並返回陣列下標。

else

j = next[j];

}if(j == lenb)

return i-j;

else

return -1;

}int main(void)

kmp字串匹配

首先要對模式串進行預處理。預處理過程就是計算出指定位置的字首和字尾的最大相同的長度 啊啊啊啊。估計只有我乙個人能看懂 這個文章說得很清楚 比如說 a a a c b c a a a 0 1 2 0 0 0 1 2 3 void getnext int next,char par 20 int n 翻...

字串匹配 KMP

參考 從頭到尾徹底理解kmp 在字串 str 中 匹配模式串 pattern 1.計算模式串的 next 陣列 2.在字串中匹配模式串 當乙個字元匹配時,str i pattern k 繼續匹配下乙個字元 當當前字元不匹配時,根據 next 陣列移動模式字串,k next k next 陣列 描述模...

字串KMP小結

一 返回模式串在主串的下標bf與kmp與kmp1 二 返回模式串在主串中出現的次數 如圖 include include includeusing namespace std define maxsize 100 int next maxsize int nextval maxsize int n ...