c# 實現(xiàn)KMP算法的示例代碼
KMP算法是一種改進的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人們稱它為克努特—莫里斯—普拉特操作(簡稱KMP算法)。KMP算法的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達到快速匹配的目的。具體實現(xiàn)就是通過一個next()函數(shù)實現(xiàn),函數(shù)本身包含了模式串的局部匹配信息。KMP算法的時間復(fù)雜度O(m+n) 。
實現(xiàn)方式就不再這里獻丑了,網(wǎng)上很多講解,此處只是記錄下c#實現(xiàn)的代碼。
public class KMP { public static int[] GetNext(String ps) { char[] p = ps.ToArray(); int[] next = new int[p.Length]; next[0] = -1; int j = 0; int k = -1; while (j < p.Length - 1) { if (k == -1 || p[j] == p[k]) { next[++j] = ++k; } else { k = next[k]; } } return next; } public static int GetIndex(String ts, String ps) { char[] t = ts.ToArray(); char[] p = ps.ToArray(); int i = 0; // 主串的位置 int j = 0; // 模式串的位置 int[] next = GetNext(ps); while (i < t.Length && j < p.Length) { if (j == -1 || t[i] == p[j]) { // 當(dāng)j為-1時,要移動的是i,當(dāng)然j也要歸0 i++; j++; } else { // i不需要回溯了 // i = i - j + 1; j = next[j]; // j回到指定位置 } } if (j == p.Length) { return i - j; } else { return -1; } } } //test static void Main(string[] args) { Console.WriteLine( KMP.GetIndex("abcdbcxdbc", "dbc")); Console.ReadKey(); }
以上就是c# 實現(xiàn)KMP算法的示例代碼的詳細內(nèi)容,更多關(guān)于c# kmp算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity 2017使用UGUI實現(xiàn)大轉(zhuǎn)盤抽獎
這篇文章主要為大家詳細介紹了Unity 2017使用UGUI實現(xiàn)大轉(zhuǎn)盤抽獎,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02C#實現(xiàn)給DataGrid單元行添加雙擊事件的方法
這篇文章主要介紹了C#實現(xiàn)給DataGrid單元行添加雙擊事件的方法,較為詳細的分析了C#給DataGrid單元添加雙擊事件的步驟及相關(guān)實現(xiàn)代碼,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07