給定兩個由英文本母組成的字串 string 和 pattern,要求找到 pattern 在 string 中第一次出現的位置,並將此位置後的 string 的子串輸出。如果找不到,則輸出「not found」。
本題旨在測試各種不同的匹配演算法在各種資料情況下的表現。各組測試資料特點如下:
輸入第一行給出 string,為由英文本母組成的、長度不超過 10610^6106
的字串。第二行給出乙個正整數
nnn(
≤10\le 10≤10),為待匹配的模式串的個數。隨後
nnn行,每行給出乙個 pattern,為由英文本母組成的、長度不超過
10510^5105
的字串。每個字串都非空,以回車結束。
對每個 pattern,按照題面要求輸出匹配結果。
abcabcabcabcacabxy
3abcabcacab
cabcabcd
abcabcabcabcacabxyz
abcabcacabxy
not found
not found
解題思路:看到這道題無疑就是用kmp演算法;下面的**就是kmp演算法的模板➕用乙個ans記錄它是否找到;
具體的kmp演算法思想在我前面的部落格有:鏈結如下:
**如下:
1 #include2 #include3using
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 對於...