字串匹配的三種演算法

2021-09-08 11:29:27 字數 897 閱讀 6102

下面將介紹三種有關字串匹配的演算法,一種是樸素的匹配演算法,時間複雜度為o(mn),也就是暴力求解。這種方法比較簡單,容易實現。一種是kmp演算法,時間複雜度為o(m+n),該演算法的主要任務是求模式串的next陣列。另外還有一種對kmp演算法的改進,主要是求nextval陣列。

第一種樸素的匹配演算法:

int index(char str, char

substr)

else

}//匹配成功

if (j ==strlen(substr))

return

index;

else

return -1

;}

第二種演算法kmp演算法,求next陣列,next[j]表示,當模式串j位置與主串i位置處發生不匹配時,i指標不回溯,j指標回溯到next[j]的位置。

對於求next[j]有三種情況:

1、j = 0時,next[j] = -1;//即模式串的第乙個字元與主串i位置發生不匹配,應將i跳過當前位置,從下乙個位置和模式串的第乙個字元繼續比較。

2、假設已知next[j] = k,即substr[0,...,k-1] = substr[j-k,j-1]。當substr[k] = substr[j]時,也就是說模式串滿足substr[0,...,k] = substr[j-k,j],可以得知next[j+1] = k + 1 = next[j] + 1;

3、當substr[k] != substr[j]時,就需要從k位置之前去查詢與substr[j]匹配的位置,假設為j'。這樣問題又可以轉化為第二種情況,即next[j+1] = next[j'] + 1 = k' + 1。

具體求解方法,請閱讀文中給出了三種求解next陣列的方法。

第三種演算法是對kmp演算法的一種優化,主要是求nextval陣列。

左旋字串的三種演算法

abcd1234 左旋4個字元 1234abcd 方法一 迴圈移動 這裡先把 a 右移7個單位,得到bcd1234a,然後再把 b 右移7個單位 得到cd1234ab。按這個步驟迴圈四次後得到1234abcd。如下 void left rotate char str,int len,int k st...

實現 strStr 字串匹配的三種解法

題目描述 實現 strstr 函式。給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 hays...

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

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