Java实现字符串匹配算法KMP
发布时间:2020-05-25 14:03:36 所属栏目:Java 来源:互联网
导读:Java实现字符串匹配算法KMP
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 kmp算法的核心思想:先对搜索字串生成偏移对照表,匹配时从左向右依次比较(bm从右向左,号称比kmp更快),相等则文档和搜索字串的下标+1迭代, 否则查表,定位最优的偏移位置(文档下标不变,搜索字串下标改变)。例外是,字符不匹配时,若搜索字串的下标为0,则文档的下标+1,继续迭代比较。
import java.util.Arrays;
public class KMPSearch {
public static int[] table;
public static void generateTab(String key){//查询字串生成偏移对照表,一次迭代就可以
int len=key.length();
table=new int[len];
Arrays.fill(table,0);
for(int i=1;i<len;i++){
if(key.charAt(i)==key.charAt(table[i-1])){
table[i]=table[i-1]+1;
}
}
for(int v : table){
System.out.print(v);
}
System.out.println();
}
public static int KMPSearchs(String doc,String key){
generateTab(key);
int result=-1;
int doc_size=doc.length(),key_size=key.length(),doc_iter=0,key_iter=0;
while(doc_iter<doc_size){//遍历所查询的文档,同样,单层循环就可以实现→_→
if(doc.charAt(doc_iter)==key.charAt(key_iter)){
doc_iter++;
key_iter++;
}else{
if(key_iter==0){
doc_iter++;
continue;
}else{
key_iter=table[key_iter-1];
continue;
}
}
if(key_iter==key_size){
result=doc_iter-key_size;
break;
}
}
return result;
}
public static void main(String[] args){
int i=KMPSearchs("bbc abcdab abcdabcdabde","abcdabd");
System.out.println(i);
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
