KMP算法实现

Posted wangweizu99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法实现相关的知识,希望对你有一定的参考价值。

KMP算法实现

package com.wwz.kmp;

import java.util.Arrays;

public class KmpDeom {
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String str1="a   abcdabd";
		String str2="abcdabd";
		int[] a=getNext(str2);
		System.out.println(Arrays.toString(a));
		System.out.println(kmp(str1, str2));
	}
	
	//kmp算法的代码实现
	public static int kmp(String str1,String str2) {
		
		int[] next=getNext(str2);
		int i=0;
		for(int j=0;i<str1.length();i++) {
			
			while(j>0&&str1.charAt(i)!=str2.charAt(j))
				j = next[j-1];
			
			if(str1.charAt(i)==str2.charAt(j)) {
				j++;
			}
			if(j==str2.length())
				return i-j+1;
		}
		return -1;
		
	}
	
	
	//得到子串的next数组
	public static int[] getNext(String str2) {
		int[] next=new int[str2.length()];
		next[0]=0;
		for(int i=1,j=0;i<str2.length();++i) {
			while(j>0&&str2.charAt(i)!=str2.charAt(j))
				j = next[j-1];
			if(str2.charAt(i)==str2.charAt(j))
				j++;
			next[i]=j;
		}
		return next;
	}

}

以上是关于KMP算法实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—串KMP模式匹配算法

KMP算法的理解和代码实现

KMP算法代码实现记录

KMP算法详解以及Java代码实现

KMP算法详解以及Java代码实现

KMP算法的代码实现