c# 实现KMP算法的示例代码

Ebony ·
更新时间:2024-11-10
· 589 次阅读

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) 。
实现方式就不再这里献丑了,网上很多讲解,此处只是记录下c#实现的代码。

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]) { // 当j为-1时,要移动的是i,当然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# 实现KMP算法的示例代码的详细内容,更多关于c# kmp算法的资料请关注软件开发网其它相关文章!

您可能感兴趣的文章:KMP算法的C#实现方法C#实现拼手气红包算法c# 实现位图算法(BitMap)经典实例讲解C#递归算法少见的C# RSA算法C# 数独求解算法的实现使用C#编写自己的区块链挖矿算法C#实现的二维数组排序算法示例C#实现简单的RSA非对称加密算法示例C#字符串自增自减算法详解同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)C#深度优先搜索算法



示例 kmp算法 C# kmp

需要 登录 后方可回复, 如果你还没有账号请 注册新账号