【KMP】串匹配-java代码【最新版本】
2012-08-14 15:25
260 查看
串匹配算法大家都不陌生,其中kmp算法算是比较经典的一种算法,然而kmp算法的精髓就是寻找next[ ]数组。
主要是对匹配串的next[ ]一个求解。
在求解next[ ]数组的时候,主要是求解字符串T的真前缀和真后缀。
根据上面的公式:
比如 字符串:abcdsdf
则a的next[ ] 的值设置为o,则b的为1,c的为1,依次是:1,1,1,1,1
如果是:abcabcdas
0,1,1,1,2,3,4,1,2
看明白了吗!
主要是对匹配串的next[ ]一个求解。
package qyq.Algorithm.KMP; /** * KMP串匹配 * @author qi * @creation 2012-8-14 更新至 2012年10月10日15:47:00 之前的有个小bug,现在已经调试通过,希望大家多多交流哈! */ public class Kmp { public static void main(String[] args) { String S="angcdthabc"; String T="hbc"; int lenS=S.length(); int lenT=T.length(); int next[]=new int[lenT+1]; getNext(T, next);//next[]数组的求解 for(int i=0;i<next.length;i++){//打印出next数组 System.err.println(i+":"+next[i]); } int kmp=K_next(S, T, lenS, lenT, next); System.err.println("第一次匹配的位置::"+kmp); } public static void getNext(String T,int next[]){//这个是重点 int j=0,k=-1; next[0]=-1; while(j<T.length()){ if(k==-1||T.charAt(j)==T.charAt(k)){ j++; k++; next[j]=k; }else { k=next[k]; } } } public static int K_next(String S,String T,int lenS,int lenT,int next[]){ int i=0,j=0; while(i<lenS&&j<lenT){ if(j==-1||S.charAt(i)==T.charAt(j)){ i++; j++; }else { j=next[j]; } } if(j==lenT){ return i-lenT; } return -1; } }
在求解next[ ]数组的时候,主要是求解字符串T的真前缀和真后缀。
根据上面的公式:
比如 字符串:abcdsdf
则a的next[ ] 的值设置为o,则b的为1,c的为1,依次是:1,1,1,1,1
如果是:abcabcdas
0,1,1,1,2,3,4,1,2
看明白了吗!
相关文章推荐
- (Oracle 技能篇 ) Oracle 连接池实例代码(Java版本)
- cocos2dx最新2.1.5版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行
- Appium Java Client 最新版本(2.1.0)支持功能及版本演进
- Java 7:最新特性、代码示例及性能测试
- JAVA代码—算法基础:背包问题(基础版本:0-1背包)
- 在aps.net开发时,改变页面对应的js代码后,重新加载页面后js代码没有加载为最新版本?
- MongoDB-JAVA-Driver 3.2版本常用代码全整理(3) - 聚合
- MongoDB-JAVA-Driver 3.2版本常用代码全整理(4) - 地理空间索引
- repo回退当前分支下所有仓库到指定日期前的最新代码版本
- 【Cocos2d-X(2.x) 游戏开发系列之二】cocos2dx最新2.0.1版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!
- 4.2以上版本的sdk使用webview js和java代码交互必须加注解才能生效
- java与 mysql6.0版本连接代码
- 发帖庆祝最新成果《Java Card 预置 Java 代码的调试解决方案》
- Java_基础—流的标准处理异常代码1.7版本
- 【伯猫Java教程】网页游戏开发过程——代码版本控制
- MongoDB-JAVA-Driver 3.2版本常用代码全整理(4) - 地理空间索引
- Myeclipse 6.5和7.0两个版本的注册码java的代码
- 关于最新版本(19)的build-tools问题:Unable to execute dex: java.nio.BufferOverflowException
- 【JAVA开发】eclipse最新版本Eclipse Neon
- Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法