串的模式之kmp演算法實踐題

2022-04-30 03:06:09 字數 1421 閱讀 2051

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

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

輸入第一行給出 string,為由英文本母組成的、長度不超過 10610^610​6

​​的字串。第二行給出乙個正整數

nnn(

≤10\le 10≤10),為待匹配的模式串的個數。隨後

nnn行,每行給出乙個 pattern,為由英文本母組成的、長度不超過

10510^510​5

​​的字串。每個字串都非空,以回車結束。

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

abcabcabcabcacabxy

3abcabcacab

cabcabcd

abcabcabcabcacabxyz

abcabcacabxy

not found

not found

解題思路:看到這道題無疑就是用kmp演算法;下面的**就是kmp演算法的模板➕用乙個ans記錄它是否找到;

具體的kmp演算法思想在我前面的部落格有:鏈結如下:

**如下:

1 #include2 #include3

using

namespace

std;45

int next1[1000005];6

void getnext(string t ,int

tsize)

7else

19 k =next1[k];

2021}22

} 23

24int kmp(string s ,string t ,int ssize,int

tsize)

25else

3538}39

if(j==tsize)

40else

43return -1;44

}45string

s ;46

string

t ;47

intn ;

48int

ssize;

49int

tsize;

50int

ans ;

51int

main()

52else

//找到,則輸出後面的字元;

6671 cout<7374}75

return0;

76 }

串的模式匹配之KMP演算法

想理一理kmp演算法的學習思路,但是不會製作 表達,暫時就用文字描述,盡量表達清晰吧。注 看多了各種解說會發現,有些演算法講解和 實現有出入,主要是因為針對的字串儲存方式不一樣,要先明確串的值從0還是1單元開始存放。給定主串s和子串t,則在s中找到t的過程稱為模式匹配,其中t稱為模式。如果在s中找到...

leetcode刷題 模式匹配之kmp演算法

kmp就是不用每次比較不同後就直接重第二個字元重新開始,例如模式串 abcabc 主串 abcabeabcabc 當比較到主串第6位時發現不同,暴力比較會直接從模式串重新開始比較,然後主串從第二位開始 kmp的話由於前面 abcab 中有ab重複,所以主串不用變,模式串直接用第3位開始。所以要知道每...

串的模式匹配演算法 KMP演算法

這個演算法理解起來有點難受,建議看下簡單的串模式匹配演算法bf演算法刷下經驗,如上鏈結。相比於brute force bf演算法 每當一趟匹配出現字元不等時,不需要回溯i指標 目標串指標 並且模式串指標j將從已經得到的部分匹配模式盡可能後移,從而降低時間消耗。o n m bf演算法為o n m 對於...