Rabin-Karp 検索アルゴリズムは正常に動作していますが、再帰検索に変更する際に誰かが私を導くのを手伝ってくれますか? http://algs4.cs.princeton.edu/53substring/RabinKarp.java.html . 例えば:
* **pattern:** rar
* **text:** abacadabrararbracabrarararacadabrabrarbracad
* **match1:** rar
* **match2:** rar
* **match3:** rar
* **match4:** rar
* **match5:** rar
* **match5:** rar
再帰的なテキスト一致検索のための他の高速なアルゴリズムはありますか?
解決
http://johannburkard.de/software/stringsearch/から外部ライブラリをビルド パスに追加します。以下のコードは、一致のすべての開始位置を返します。match1 や match2 などの組み込みのものも含まれます。
import com.eaio.stringsearch.BNDM;
String pattern = "rar";
String text = "abacadabrararbracabrarararacadabrabrarbracad";
// Loop through text to get starting position of matched pattern.
List<Integer> matchPoint =new ArrayList<Integer>();
int slice = -1;
while (slice<text.length()){
slice+=1;
com.eaio.stringsearch.BNDM result = new BNDM();
int pos = result.searchString(text, slice, pattern);
if (pos != -1) {
slice = pos;
matchPoint.add(pos);
}
}