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;q0&&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 KMPmatcher(String T,String P)
	{
		List res=new ArrayList();
		int[] next=new int[P.length()];
		next=computePrefix(P);
		int q=0;
		for(int i=0;i0&&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 pos=new ArrayList();
		pos=KMPmatcher(T,P);
		System.out.println(pos);
		
	}
	
}





你可能感兴趣的:(算法)