字串的模式匹配

2021-06-19 08:52:33 字數 849 閱讀 8529

0) 引論

這裡主要想討論一下字串的模式匹配,主要是kmp演算法。

假設我們有乙個字串s,稱之為原始串;另乙個字串t,稱之為模式串;字串匹配是指找出原始串s中是否含有模式串t,如果含有,則返回s中第乙個匹配項的位置;

例如s=「abcabcabdef」;t=「abcabd」;那麼我們可以得到s中含有模式串t,我們返回s中第乙個匹配項的位置,即3。

1) brute-force演算法

暴力演算法,應該算是最樸素的演算法了,大概小學生也能想出這個解決方法;bf演算法的思想是:從s的第乙個字元與t的第乙個字元開始比較,如果相等,則進行下乙個字元的比較,直到遇到不相等的項;這時我們把t的第乙個字元與s的第二個字元相比較,重複上面的過程,知道找到匹配的項為止,或者返回乙個值,顯示沒有匹配的項。

對上面的例子:

abcabcabdef

abcabd;

可知匹配不成立,所以要把t向右移一位,即

abcabcabdef

abcabd;

還是不成立,繼續右移一位

abcabcabdef

abcabd;

還是不成立,繼續右移一位

abcabcabdef

abcabd;

這時我們得到了匹配,返回位置3。

由此可見,bf演算法就是乙個類似於窮搜的演算法,這個演算法的時間複雜度為o(strlen(s)*strlen(t))。空間複雜度為o(1)

**實現:

# include#include#includeint bruteforce(char *s,char *t)

else

k = next[k];

}}

字串模式匹配

include include include include include includeusing namespace std inline unsigned int64 getclock const char min a const int characters 26 int shiftta...

字串模式匹配

子串的定位操作通常稱作串的模式匹配,是各種串處理系統中最重要的操作之一。設有2 個串 主串 s和子串 t,串的簡單模式匹配演算法是 從主串 s 中的第乙個字元開始和子串 t中的第乙個字元比較,分別用i和 j 指示s串和 t串中正在比較的字元的位置。若相等,則繼續逐個比較後續字元 否則從主串 s的第二...

字串模式匹配

bf演算法 我們常用的暴力演算法,時間複雜度o n2 o n 2 演示 int bf const char text,const char pattern if flag return 1 return 0 kmp演算法 基於bf演算法的優化,他根據字串出現字首與字尾相同的情況進行優化 假設這裡sa...