Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure boyer_moore(const haystack: string; const needle: string; var result: byte);
- var
- i, j, k : byte;
- needle_len : byte;
- haystack_len : byte;
- needle_table : array[char] of byte;
- begin
- needle_len := length(needle);
- haystack_len := length(haystack);
- if needle_len < haystack_len then
- begin
- for i := 0 to 255 do
- needle_table[chr(i)] := needle_len;
- for i := 1 to needle_len-1 do
- needle_table[needle[i]] := needle_len-i;
- i := needle_len;
- j := i;
- while (j > 0) and (i <= haystack_len) do
- begin
- j := needle_len; k := i;
- while (j > 0) and (haystack[k] = needle[j]) do
- begin
- dec(k);
- dec(j);
- end;
- i := i + needle_table[haystack[i]];
- end;
- if k > haystack_len - needle_len then
- result := 0
- else
- result := k + 1;
- end
- else
- result := 0;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement