KMP字符串匹配算法及其實現

--------------------------------天道酬勤

KMP(字符串1,字符串2)

kmp算法實現字符串1不回溯,一趟找到字符串1中是否包含字符串2。關鍵在於如何確定失配時字符串2的偏移量。以下用一張圖來說明

代碼實現:

public class KmpDemo {
	/*
	 * 	字符串匹配算法演示
	 */
	public static void main(String[] args)
	{
		String t="abaabcac";
		String s="acabaabaabcacaabc";
		int[] arr=getNext(t);
		System.out.println(kmp(s,t,arr));
	}
	//生成模式串匹配失敗後繼續匹配的位置
	public static int[] getNext(String t)
	{
		int arr[]=new int[t.length()];
		arr[0]=-1;   //第一個字符不匹配
		int i=0;
		int j=-1;
		while(i<t.length())
		{
			if(j==-1||t.charAt(i)==t.charAt(j))
			{
				i++;
				if(i<t.length())
					arr[i]=++j;
			}
			else 
			{
				j=arr[j];
			}
		}
		return arr;
	}
	public static boolean kmp(String s,String t,int[] arr)
	{
		int i=0;
		int j=0;
		while(i<s.length())
		{
			if(j==-1||s.charAt(i)==s.charAt(j))
			{
				i++;
				j++;
				if(j==t.length())
				{
					return true;
				}
			}
			else 
			{
				j=arr[j];
			}
		}
		return false;
	}
}

 

                                     -----------------------------共勉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章