字串模式匹配(BF演算法和KMP演算法)

2021-09-30 11:35:16 字數 805 閱讀 5176

字串模式匹配:

在主串s中尋找子串t,若主串第i個下標開始的字串同子串t完全相同,則返回下標i,若遍歷完主串s未找到匹配,則返回-1。

bf(brute force)演算法:

bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元;若不相等,則比較s的第二個字元和t的第乙個字元,依次比較下去,直到得出最後的匹配結果,

bf演算法在每次字元不匹配時, 都要回溯到開始位置,時間開銷較大,複雜度為o(length(s)*length(t))

kmp演算法:

kmp演算法解決了這個缺點,簡單的說,kmp演算法就是研究當字串不匹配時,t應當回溯到什麼位置,以避免多餘的回溯和比較過程。利用已經部分匹配這個有效資訊,保持主串s指標不回溯,通過修改子串t指標,讓模式串盡量地移動到有效的位置。

因為在t的每乙個位置都可能發生不匹配,因此通常使用乙個int型的陣列next來標誌當t中的每個元素不匹配時,子串t指標應該回溯的位置。

關於next陣列的推導問題,可以參考

這篇文章。

這裡給出兩種演算法的實現程式:

#include "stdafx.h"

#include using namespace std;

namespace stringpattern

{ //bf 演算法的實現

int stringpattern_bf(const char* s,int slen, const char* t,int tlen)

{ int i = 0, j = 0;

while (i < slen&&j

字串的模式匹配(BF演算法,KMP演算法)

模式匹配含義 給定兩個字串,在主串s中查詢子串t的過程就稱為字串的模式匹配。bf演算法 基本思想就是暴力匹配,將子串的第乙個字元與主串的第乙個字元進行比較,若相等,則比較第二個字元。若不相等,則與主串的第二個字元進行比較,以此類推,直到匹配到為止。如下 返回模式串t在主串中從start開始的第一次匹...

BF和KMP字串匹配

暴力匹配 bf 演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和t的第二個字元 若不相等,則比較s的第二個字元和t的第乙個字元,依次比較,直到得出最後的匹配結果。package com.yc.algorithm...

字串 字串的模式匹配 BF和KMP

定義在字串中尋找子串 第乙個字元 在串中的位置 相關在串的模式匹配中,子串稱為模式,主串稱為目標 執行時間為o n m 1 初始時讓目標t的第 0 位與模式p的第 0 位對齊 2 順序比對目標t與模式p中的對應字元 1 若 p 與 t 比對發現對應位不匹配,則本趟失配。將 p 右移一位與 t 對齊,...