Boyer–Moore String Search Algorithm

Boyer–Moore string search algorithm is an efficient string searching algorithm that is the standard benchmark for practical string search literature.

public static int[] SearchString(string str, string pat) { List<int> retVal = new List<int>(); int m = pat.Length; int n = str.Length; int[] badChar = new int[256]; BadCharHeuristic(pat, m, ref badChar); int s = 0; while (s <= (n - m)) { int j = m - 1; while (j >= 0 && pat[j] == str[s + j]) --j; if (j < 0) { retVal.Add(s); s += (s + m < n) ? m - badChar[str[s + m]] : 1; } else { s += Math.Max(1, j - badChar[str[s + j]]); } } return retVal.ToArray(); } private static void BadCharHeuristic(string str, int size, ref int[] badChar) { int i; for (i = 0; i < 256; i++) badChar[i] = -1; for (i = 0; i < size; i++) badChar[(int)str[i]] = i; }

Example

string data = "the quick brown fox jumps over the lazy dog"; int[] value = SearchString(data, "the");

Output