一.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...