Boyer-Moore Algorithm code in C#
In computer science, the Boyer–Moore string-search algorithm is an efficient string-searching algorithm that is the standard benchmark for practical string-search{alertSuccess}
In this article, I will show you the implementation of the ==Boyer-Moore == algorithm. Boyer Moore is a string searching algorithm. It avoids checking most positions in the source string. The implementation here uses constant characters.
public class Search
{
private static int[] BuildBadCharTable(char[] needle)
{
int[] badShift = new int[256];
for (int i = 0; i < 256; i++)
{
badShift[i] = needle.Length;
}
int last = needle.Length - 1;
for (int i = 0; i < last; i++)
{
badShift[(int)needle[i]] = last - i;
}
return badShift;
}
public static int boyerMooreHorsepool(String pattern, String text)
{
char[] needle = pattern.ToCharArray();
char[] haystack = text.ToCharArray();
if (needle.Length > haystack.Length)
{
return -1;
}
int[] badShift = BuildBadCharTable(needle);
int offset = 0;
int scan = 0;
int last = needle.Length - 1;
int maxoffset = haystack.Length - needle.Length;
while (offset <= maxoffset)
{
for (scan = last; (needle[scan] == haystack[scan + offset]); scan--)
{
if (scan == 0)
{ //Match found
return offset;
}
}
offset += badShift[(int)haystack[offset + last]];
}
return -1;
}
}