給定兩個由英文本母組成的字串 string 和 pattern,要求找到 pattern 在 string 中第一次出現的位置,並將此位置後的 string 的子串輸出。如果找不到,則輸出「not found」。
本題旨在測試各種不同的匹配演算法在各種資料情況下的表現。各組測試資料特點如下:
資料0:小規模字串,測試基本正確性;
資料1:隨機資料,string 長度為 105 ,pattern 長度為 10;
資料2:隨機資料,string 長度為 105 ,pattern 長度為 102 ;
資料3:隨機資料,string 長度為 105 ,pattern 長度為 103 ;
資料4:隨機資料,string 長度為 105 ,pattern 長度為 104 ;
資料5:string 長度為 106 ,pattern 長度為 105 ;測試尾字元不匹配的情形;
資料6:string 長度為 106 ,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 ...