C implementation method of KMP algorithm

  • 2020-09-28 09:06:36
  • OfStack

This paper briefly describes the C# implementation method of KMP algorithm and shares it with you for your reference. The details are as follows:

The specific idea is as follows: next function calculates the right sliding number of the pattern string, and then stores the next function value of the pattern string into the array next.

The specific implementation code is as follows:


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 algorithm code is as follows:


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(" No matching string! ");
  else Console.WriteLine(pos1);
  Console.Write(" Please press any key to continue. ");
  Console.ReadKey(true);
}
}

Hopefully this article has helped you with your C# programming.


Related articles: