java实现Brute-Force和KMP模式匹配

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=t.length())    //匹配成功,返回子串序号
			return i-tlen;
		else             //匹配失败,返回-1
			return -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
KMP算法实现

public int index_KMP(IString T,int start){
		int[]next=getnext(T);  //计算模式串的next【】函数值
		int i=start;
		int j=0;
		while(i=t.length())    //匹配成功,返回子串序号
			return i-tlen;
		else             //匹配失败,返回-1
			return -1;
		
	}




你可能感兴趣的:(数据结构)