Реализация алгоритма Бойера Мура Хорспула с подстановочными знаками
Я хочу реализовать обобщение алгоритма Бойера Мура Хорспула, который заботится о подстановочных знаках (соответствует любой букве в слове). Это означает, что шаблон h _ _ s e
будет найден в этом тексте два раза: horsehouse
,
Мне нужна помощь для реализации этого, я не могу получить достаточно глубокое понимание алгоритма, чтобы понять это самостоятельно, некоторые советы?
int [] createBadCharacterTable(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;
}
int boyerMooreHorsepool(String word, String text) {
char [] needle = word.toCharArray();
char [] haystack = text.toCharArray();
if(needle.length > haystack.length) {
return -1;
}
int [] badShift = createBadCharacterTable(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] || needle[scan] == (int) '_'); scan--) {
if(scan == 0) { //Match found
return offset;
}
}
offset += badShift[(int) haystack[offset + last]];
}
return -1;
}