字元字串模式匹配演算法 BF演算法與KMP演算法

2021-10-13 18:17:19 字數 955 閱讀 8767

需解決的問題:從主字串s中尋找子字串t出現的第乙個位置?如果出現,返回pos,否則,返回-1

一、bf演算法

bf演算法就是樸素模式匹配演算法,即暴力求解,迴圈遍歷。將子字串的每個字元和主字串的字元按順序比較,如果比較不相等時,兩個字串的索引i和j同時回退,i回退到剛才主字串起始位置的下一位,子字串回退到首位,這種方法效率比較低。

如下圖:當i和j的位置不相等時,則回退。

//bf演算法中索引i和索引j都要回溯,所以效率低

int bf(const char* s, const char* t)

else

} if (t[j] == '\0') //由於字串結束,則說明找到

else//由於主串結束,則說明沒有找到

}

二、kmp演算法

kmp演算法是為了讓bf演算法中不必要的回退發生,即i不回退,j回退。問題就在於j回退到哪個位置合適呢?這個回退位置通過乙個陣列next來記錄,next陣列的長度等於子串的長度。next陣列表示的是當前位置之前的子串的最大公共前字尾長度,當兩個字元比較不相等時,則j回退到next[j]的位置。

**如下:

//j=0,next[j]=-1;表示不進行字元比較

//j>0,next[j]=最長公共前字尾長度

int kmp(const char* s, const char* t)

else}}

字串模式匹配演算法 BF演算法

include include intbf char str1,char str2,int length1,int length2,int pos int main 字串模式匹配演算法 str1為主串,str2為子串 length1為主串長度,length2為子串長度,intbf char str1...

字串匹配演算法 BF

brute force演算法,簡稱bf演算法,是一種簡單樸素的模式匹配演算法,常用語在乙個主串string內查詢乙個子串 pattern的出現位置。核心思想 i遍歷主串string i 每自增一次,內層迴圈用j遍歷子串pattern,同時判斷patter j string i j 若條件成立,j 自...

字串模式匹配之BF演算法

演算法原理 bf brute force 演算法是字串模式匹配中原理最簡單,也是最直觀的演算法。基本思想是從源字串s中查詢目的字串p,從s中的n個字元開始和p的第乙個字元開始比較,若相等,則繼續分別取s和p的下乙個字元繼續比較,一次類推,直到源字串s中的某一連續串和p完全相等,則匹配成功。如果在匹配...