演算法系列之十二 字串匹配之蠻力匹配

2021-09-29 05:45:11 字數 1629 閱讀 9121

引言

字串匹配是資料庫開發和文字處理軟體的關鍵。幸運的是所有現代程式語言和字串庫函式,幫助我們的日常工作。不過理解他們的原理還是比較重要的。

字串演算法主要可以分為幾類。字串匹配就是其中之一。當我們提到字串匹配演算法,最基本的方法就是所謂的蠻力解法,這意味著我們需要檢查每乙個文字串中的字元是否和匹配串相匹配。一般來說我們有文字串和乙個匹配串(通常匹配串短於文字串)。我們需要做的就是回答這個匹配串是否出現在文字串中。

概述

字串蠻力匹配法的原理非常簡單。我們必須檢查匹配串的第乙個字元與文字串的第乙個字元是否相匹配,就如下所述。

我們通過比較文字串的和匹配串的第乙個字元來開始

如果他們不匹配我們移向文字串的第二個字元。現在我們比較匹配串的第乙個字元和文字串第二個字元。如果他們不匹配我們繼續向前移動,直到我們遇到乙個相匹配的或直到我們到達文字串的最後。

因為文字串第乙個字元和匹配串的第乙個字元不匹配,我們向前移動到文字串的的第二個字元。現在我們比較文字串的第二個字元和匹配串的第乙個字元!

如果文字串的乙個字元和匹配串的第乙個字元相匹配,我們向前移動到匹配串第二個字元和文字串的下乙個字元做匹配

如果僅僅是因為匹配串的第乙個字元與文字串的某個字元相匹配,那並不意味著這個匹配串出現在文字串中,也僅僅是第乙個字元出現在文字串中,其他說明不了。我們必須向前移動匹配串,看看完整的匹配串是否包含在文字文字串中。

匹配串相匹配

**

/*--------------------------------

* 日期:2015-02-05

* 題目: 字串匹配之蠻力匹配

* 部落格:

------------------------------------*/

#include using namespace std;

int substring(string text,string pattern)//while

// match

if(j == n)//if

}//for

return -1;

}int main(){

string text("hello world!");

string pattern("o wo");

int result = substring(text,pattern);

cout

就像我說的這個演算法是緩慢的。實際上每乙個演算法,只要在它的名字中包含「蠻力」二字,這個演算法都是很緩慢的,其時間複雜度是o(n*m)。這裡m是文字串的長度,而n是匹配串的長度。

演算法系列之十二 字串匹配之蠻力匹配

引言 字串匹配是資料庫開發和文字處理軟體的關鍵。幸運的是所有現代程式語言和字串庫函式,幫助我們的日常工作。不過理解他們的原理還是比較重要的。字串演算法主要可以分為幾類。字串匹配就是其中之一。當我們提到字串匹配演算法,最基本的方法就是所謂的蠻力解法,這意味著我們需要檢查每乙個文字串中的字元是否和匹配串...

蠻力演算法字串匹配

在這裡我們運用蠻力演算法解決,另外此問題還能用kmp演算法。該演算法的做法是將模式 也就是較短的子串,長度為m 對準文字 也就是較長的字串,長度為n 的前m個字元,從左到右匹配每一對相應的字元,如果有m對字元都匹配成功,那麼演算法停止,或者當遇到有一對不匹配時就將模式向右移一位,然後繼續從模式的第乙...

演算法系列之二十六 字串匹配之KMP演算法

一 簡介 kmp演算法是一種改進的字串匹配演算法,由d.e.knuth與v.r.pratt和j.h.morris同時發現,因此人們稱它為克努特 莫里斯 普拉特操作 簡稱kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。二 基於部分匹配表的km...