java实现Brute-Force和KMP模式匹配
来源:互联网 发布:物流app软件排名 编辑:程序博客网 时间:2024/05/18 16:36
Brute-Force模式匹配算法
从主串第start(i=start)个字符起,与模式串t的第一个字符(j=0)开始比较。
若相等,则继续比较后面字符(i++,j++)
若不相等,则从主串第二个字符起重新和模式串t比较(i=i-j+1,j=0)
若都匹配成功,则返回模式串t第一个字符在主串的位置
否则返回-1
public int index_BF(IString t,int start){ //t为模式串int slen=this.length();int tlen=t.length();int i=start;int j=0;while(i<slen&&j<tlen){ if(this.charAt(i)==t.charAt(j)){ //j为模式串当前字符下标 i++;j++;}else{i=i-j+1; //继续比较后续字符j=0; //模式串下标回退到0}}if(j>=t.length()) //匹配成功,返回子串序号return i-tlen;else //匹配失败,返回-1return -1;}KMP模式匹配
个人感觉以下这篇文章不错,举了一个例子来理解KMP,简单直观,不过他是用c写的
下面我用java实现
点击打开链接
首先建立next[]函数
//next[0]=-1表示0个元素,不存在前后缀 //next[1]=0表示有一个元素,前后缀长度为0 //next[2]=1表示有两个元素,前后缀长度为1 public int[] getnext(IString T){ int[]next=new int[T.length()]; //next数组 int j=1; //主串指针 int k=0; //模式串指针 next[0]=-1; next[1]=0; while(j<T.length()-1){ if(T.charAt(j)==T.charAt(k)){ //匹配 next[j+1]=k+1; k++; j++; } else if(k==0){ //失配 next[j+1]=0; j++; } else k=next[k]; } return(next); }KMP算法实现
public int index_KMP(IString T,int start){int[]next=getnext(T); //计算模式串的next【】函数值int i=start;int j=0;while(i<this.length()&&j<T.length()){ //从左到右依次比较if(j==0||this.charAt(i)==T.charAt(j)){ //j==0表示S[i]!=T[0]则转到下一字符i++;j++;}else //当S[i]!=T[j]时,模式串右移j=next[j];}if(j<T.length()) //匹配失败return -1;else //匹配成功return(i-T.length()); }public int index_BF(IString t,int start){ //t为模式串int slen=this.length();int tlen=t.length();int i=start;int j=0;while(i<slen&&j<tlen){ if(this.charAt(i)==t.charAt(j)){ //j为模式串当前字符下标 i++;j++;}else{i=i-j+1; //继续比较后续字符j=0; //模式串下标回退到0}}if(j>=t.length()) //匹配成功,返回子串序号return i-tlen;else //匹配失败,返回-1return -1;}
阅读全文
0 0
- java实现Brute-Force和KMP模式匹配
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- 两种模式匹配算法:Brute-Force和KMP
- 字符串模式匹配之Brute force、KMP、Horspool算法
- 对比了一下数据结构上的朴素模式匹配(Brute Force)和KMP算法
- 串--->串的模式匹配:Brute-Force算法和 KMP算法
- Brute-Force模式匹配算法
- 字符串匹配算法---Brute force、KMP、Sunday
- 数据结构与算法(Java描述)-12、串的模式匹配算法(Brute-Force与KMP算法)
- 模式匹配算法之brute force
- Java 串匹配Brute-Force算法
- Brute Force匹配(暴力匹配)和FLANN匹配区别
- 特征匹配之Brute-Force 匹配和FLANN 匹配器
- 串的模式匹配之 Brute—Force(BF)
- 字符串模式匹配 BF(Brute Force)算法
- 串的模式匹配——Brute-Force算法
- 模式匹配之BF(Brute Force)暴力算法
- Brute-Force算法实现
- dd fdisk mount相关命令的总结
- 排序
- 在滴滴,我是如何指数级提升开发技术的?
- eclipse启动tomcat时的报错
- 第十七日总结
- java实现Brute-Force和KMP模式匹配
- Express框架
- Toast自定义,图片加文字
- Java中集合循环删除元素的问题
- 利用openfire和smark的即时通信
- 统计个数
- 防范撸羊毛,这些可以帮到你
- windows下搭建FTP
- 消除重复