字串匹配演算法

2021-08-20 00:07:04 字數 996 閱讀 2193

一.bf演算法

時間複雜度為:o(m*n)

思想:假設現在主串s匹配到 i 位置,子串p匹配到 j 位置,則有:

如果當前字元匹配成功(即s[i] == p[j]),則i++,j++,繼續匹配下乙個字元;

如果失配(即s[i]! = p[j]),令i = i - j + 1,j = 0。相當於每次匹配失敗時,i 回退到本次開始的下乙個位置,j 回退到子串的開頭。

演算法實現:

int bf(const char *ps,const char *pstr,int pos)

int pslen = strlen(ps);//注意:sizeof(ps)/sizeof(char)求下來為4,

cout

int i = pos;//ps的下標

int j = 0;//pstr的下標

while(i < pslen && j= pstrlen)//如果if成立,則子串遍歷完了,說明找到了子串

else

}

二.kmp演算法

時間複雜度:o(m+n)

思想:kmp演算法中i不需要回退且j回退到next[j]的位置

。具體思想以一張圖來解釋:

演算法的實現:

int* getnext(const char *sub)//此處的sub為遍歷過str的前一部分

else

}} return next;

}int kmp(const char *str,const char *sub,int pos)

int i = pos;

int j = 0;

int *next = getnext(sub);//獲取next組

while(i < lens && j= lensub)

else

}

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...