如何通过Java代码实现KMP算法
这篇文章主要介绍了如何通过Java代码实现KMP算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,
函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
代码如下
importjava.util.Arrays; publicclassTest{ /** *@paramstr文本串 *@paramdest模式串 *@paramnext匹配核心数组 *@return */ publicstaticintkmp(Stringstr,Stringdest,int[]next){ for(inti=0,j=0;i0&&str.charAt(i)!=dest.charAt(j)){ j=next[j-1]; } if(str.charAt(i)==dest.charAt(j)){ j++; } if(j==dest.length()){ returni-j+1; } } return0; } publicstaticint[]kmpnext(Stringdest){ int[]next=newint[dest.length()]; next[0]=0; for(inti=1,j=0;i 0&&dest.charAt(j)!=dest.charAt(i)){ j=next[j-1]; } if(dest.charAt(i)==dest.charAt(j)){ j++; } next[i]=j; } returnnext; } publicstaticvoidmain(String[]args){ Stringa="ABABAE"; Stringb="ABABABABAEBEABADAEABAEABABAE"; int[]next=kmpnext(a); System.out.println(Arrays.toString(next)); intres=kmp(b,a,next); System.out.println(res); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。