Rabin-Karp搜索算法工作正常,但任何人都可以帮助指导我将其修改为递归搜索吗? http://algs4.cs.princeton.edu/53substring/RabinKarp.java.html。 例如:返回递归匹配的字符串搜索算法 - Java
* **pattern:** rar
* **text:** abacadabrararbracabrarararacadabrabrarbracad
* **match1:** rar
* **match2:** rar
* **match3:** rar
* **match4:** rar
* **match5:** rar
* **match5:** rar
还有其他的递归文本匹配搜索更快的算法?
SOLUTION
从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);
}
}
你有没有经验将迭代代码转换为递归代码,对于一般情况是? – 2012-01-17 09:30:38
nope,通常我只是简单地将'pattern'放入一个函数中并调用搜索,直到函数返回'text'的末尾。 – alvas 2012-01-17 09:34:11
好吧,你在某种程度上处于正确的轨道。这个想法是打破一个迭代解决两个或多个子问题然后用另一个递归调用来解决问题的问题。这是基本原则。 – 2012-01-17 09:38:34