KMP字串匹配

2021-10-05 19:27:18 字數 1010 閱讀 5766

給定兩個由英文本母組成的字串 string 和 pattern,要求找到 pattern 在 string 中第一次出現的位置,並將此位置後的 string 的子串輸出。如果找不到,則輸出「not found」。

本題旨在測試各種不同的匹配演算法在各種資料情況下的表現。各組測試資料特點如下:

輸入第一行給出 string,為由英文本母組成的、長度不超過 10​6​​ 的字串。第二行給出乙個正整數 n(≤10),為待匹配的模式串的個數。隨後 n 行,每行給出乙個 pattern,為由英文本母組成的、長度不超過 10​5​​ 的字串。每個字串都非空,以回車結束。

對每個 pattern,按照題面要求輸出匹配結果。

abcabcabcabcacabxy

3abcabcacab

cabcabcd

abcabcabcabcacabxyz

abcabcacabxy

not found

not found

**:

#include#includeusing namespace std;

void buildnext(int next ,string match)

if(match[j+1] == match[i])

else }}

int kmp(string pattern, string match)

int s=0,p=0;

int next[n];

next[0] = -1;

buildnext(next,match); // 構造匹配移動陣列

while(s < m && p < n)

else if(p>0)

else

} return p == n? (s- p): -1;

}int main()

else

}if(i!=n-1) cout<} return 0;

}

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字串匹配

判斷s中是否含有字串t。一般思路為 從s中首字元開始,依次與t中進行比對,直到t結尾或者某乙個位置兩者不同 如果到t的結尾,則表示s中含有t。如果有乙個位置不相同,那麼從s中下乙個字元開始,再次與t中字元比對。如下 i 0,j 0 for i len 這樣的比較,每一次遇到不同的時候都需要從t串的第...