Wildcard Boyer Moore Horsepool Implementation

I want to implement a generalization of the Boyer Moore Horspool algorithm, which takes care of wildcards (matches any letter in a word). This means that the pattern h _ _ se will be found twice in this text: horsehouse .

I need help to implement this, I can’t get a deep enough understanding of the algorithm to understand it myself, some tips?

 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; } 
+4
source share

Source: https://habr.com/ru/post/1446975/


All Articles