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算法

kmp算法

KMP算法