VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • C#教程之KMP算法的C#实现方法

本文实例简述了KMP算法的C#实现方法,分享给大家供大家参考。具体如下:

具体思路为:next函数求出模式串向右滑动位数,再将模式串的str的next函数值 存入数组next。

具体实现代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void GetNextVal(string str, int [] next)
{
  int i = 0;
  int j = -1;
  next[0] = -1;
  while (i < str.Length - 1)
  {
 if (j == -1 || str[i] == str[j])
 {
   i++;
   j++;
   next[i] = j;
 }
 else
 {
   j = next[j];
 }
  }
}

KMP算法代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
static int KMP(string zstr, string mstr)
{
  int i, j;
  int[] next = new int[mstr.Length];
  GetNextVal(mstr, next);
  i = 0;
  j = 0;
  while (i < zstr.Length && j < mstr.Length)
  {
 if (j == -1 || zstr[i] == mstr[j])
 {
   ++i;
   ++j;
 }
 else
 {
   j = next[j];
 }
  }
  if (j == mstr.Length)
 return i - mstr.Length;
  return -1;
}
 
 
static void Main(string[] args)
{
  string zstr, mstr;
  zstr = Console.ReadLine();
  mstr = Console.ReadLine();
  int pos1;
  pos1 = KMP(zstr, mstr);
  if (pos1 == -1) Console.WriteLine("没有匹配的字符串!");
  else Console.WriteLine(pos1);
  Console.Write("请按任意键继续。。");
  Console.ReadKey(true);
}
}

希望本文所述对大家的C#程序设计有所帮助。


相关教程