using System.Collections;
public void BoyerMoore(string str, string search)
Hashtable table = new Hashtable();
char[] ch = search.ToCharArray();
for (int i = 0; i < ch.Length; i++)
if (!table.ContainsKey(ch[i]))
int start = search.Length - 1;
int end = search.Length - 1;
char[] find = str.ToCharArray();
for (int i = 0; i < find.Length; i++)
if (find[start] == ch[final])
while (find[start] == ch[final] && final >= 0 && start >= 0)
if (start == 0 || final == 0)
Console.WriteLine("Found at : {0}", sum - (search.Length - 1));
start = sum + search.Length - 1;
if (table.ContainsKey(find[start]))
start = start + ((Convert.ToInt32(table[find[start]])));
start = sum + search.Length - 1;
if (table.ContainsKey(find[start]))
start = sum + (Convert.ToInt32(table[find[start]]) - 1);
start = sum + search.Length - 1;
public static void Main()
string str = "AABAACAADAABAABA";
Program program = new Program();
program.BoyerMoore(str, search);