KMP字符串匹配算法Java实现

根据算法导论的的伪代码进行实现:

import java.util.ArrayList;
import java.util.List;

public class KMP {
	
	static int[] computePrefix(String P)
	{
		int[] next=new int[P.length()];
		int k=0;
		next[0]=0;
		for(int q=1;q<P.length();q++)
		{
			while (k>0&&P.charAt(k)!=P.charAt(q))
				k=next[k];
			if(P.charAt(k)==P.charAt(q))
				k=k+1;
			next[q]=k;
		}
		return next;
	}
	
	static List<Integer> KMPmatcher(String T,String P)
	{
		List<Integer> res=new ArrayList<Integer>();
		int[] next=new int[P.length()];
		next=computePrefix(P);
		int q=0;
		for(int i=0;i<T.length();i++)
		{
			while(q>0&&P.charAt(q)!=T.charAt(i))
				q=next[q-1];
			if(P.charAt(q)==T.charAt(i))
				q=q+1;
			if(q==P.length())
			{
				res.add(i-q+1);
				q=next[q-1];
			}
		}
		return res;
	}
	
	public static void main(String[] args)
	{
		String T="aabababcacbaab";
		String P="ababa";
		
		List<Integer> pos=new ArrayList<Integer>();
		pos=KMPmatcher(T,P);
		System.out.println(pos);
		
	}
	
}

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/zfyseu1/article/details/54813517
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞