浙大資料結構 KMP 串的模式匹配 25 分

2021-09-26 20:41:54 字數 2226 閱讀 2433

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

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

資料0:小規模字串,測試基本正確性;

資料1:隨機資料,string 長度為 10​5​​ ,pattern 長度為 10;

資料2:隨機資料,string 長度為 10​5​​ ,pattern 長度為 10​2​​ ;

資料3:隨機資料,string 長度為 10​5​​ ,pattern 長度為 10​3​​ ;

資料4:隨機資料,string 長度為 10​5​​ ,pattern 長度為 10​4​ ;

資料5:string 長度為 10​6​​ ,pattern 長度為 10​5​​ ;測試尾字元不匹配的情形;

資料6:string 長度為 10​6​​ ,pattern 長度為 105​​ ;測試首字元不匹配的情形。

輸入格式:

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

​6​​ 的字串。第二行給出乙個正整數 n(≤10),為待匹配的模式串的個數。隨後 n 行,每行給出乙個 pattern,為由英文本母組成的、長度不超過 10

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

輸出格式:

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

輸入樣例:

abcabcabcabcacabxy

3abcabcacab

cabcabcd

abcabcabcabcacabxyz

輸出樣例:

abcabcacabxy

not found

not found

#include#include#define maxsize 1000001

#define pmax 100001

typedef char pattern[pmax];

typedef int matcharr[pmax];

using namespace std;

/*簡單版本的建立match陣列*/

/*更好的版本*/

主要是重新歸類了一下關於下標的問題,以後所有的關於下標的問題都從下面這個公式考慮。要求是:起始下標,結尾下標,包括下標在內的元素個數n,知道任意兩個可以求出第三個,並且排列是連續的,如果有任何變形都基於此(比如不算末尾或者n少了乙個)

資料結構 串的模式匹配 KMP演算法

目錄概念 簡述kmp演算法原理 計算next陣列 kmp演算法 測試 改進kmp演算法簡介 從s中匹配t串,在bf演算法中,通過指標回溯不斷進行匹配,其思想是窮舉。效率很低,但有些串有一定的規律,不需要回溯s串的指標,這就是kmp演算法。比如 s aaaaaab t aaab 在進行比較時,如果按照...

資料結構例程 串的模式匹配(KMP演算法)

本文針對資料結構基礎系列網路課程 4 串中第5課時串的模式匹配 kmp演算法 kmp演算法 include include sqstring.h void getnext sqstring t,int next 由模式串t求出next值 else k next k int kmpindex sqst...

大話資料結構之串與模式匹配KMP

堅持用blog記錄學習之路,加油 2019.4.29 陳百強 偏偏喜歡你 typedef char string maxsize 1 0號單元存放串的長度 init status strassign string t,char chars strcopy status strcopy string ...