串的模式匹配:KMP算法

原创 2015年11月17日 16:54:08
package KMP;

public class Main
{
	public static void main(String args[])
	{
		String s = "BBC ABCDAB ABCDABCDABDEABCDABDABD";
		String t = "ABCDABDABD";
		int i = KMPIndex(s, t);
		if (i == -1)
			System.out.println("flase");
		else
			System.out.println("true,index:" + i);

	}

	public static void GetNext(String t, int next[])
	{
		int j, k;
		j = 0;
		k = -1;
		next[0] = -1; // 模式串next数组第一位为-1
		while (j < t.length() - 1)
		{
			if (k == -1 || t.charAt(j) == t.charAt(k))
			{
				j++;
				k++;
				next[j] = k;// 模式串next数组后面的值为模式串中对应的字符第一次出现的位置
			} else
				k = next[k];   
		}
		System.out.print(" ");
		for (int i = 0; i < t.length(); i++)
		{
			System.out.print(t.charAt(i) + " ");
		}
		System.out.println();
		for (int i = 0; i < t.length(); i++)
		{
			System.out.print(next[i] + " ");
		}
		System.out.println();
	}

	public static int KMPIndex(String s, String t)
	{
		int[] next = new int[100];
		int i = 0, j = 0;
		GetNext(t, next);
		while (i < s.length() && j < t.length())
		{
			if (j == -1 || s.charAt(i) == t.charAt(j))
			{
				i++;              //i加,j加
				j++;
			} else
				j = next[j];      //i不变,j后退---->模式串右滑,匹配串还是取s[i]
		}
		if (j >= t.length())
			return (i - t.length());
		else
			return (-1);
	}
}

输出:

 A B C D A B D A B D 
-1 0 0 0 0 1 2 0 1 2 
true,index:23


由此可见,模式串的next数组第一位为-1,后面的值为模式串中对应的字符第一次出现的位置

版权声明:本文为博主原创文章,未经博主允许不得转载。

模式匹配kmp算法的ppt

  • 2011年07月27日 10:41
  • 223KB
  • 下载

模式匹配中的KMP算法的实现

  • 2015年02月11日 12:48
  • 83KB
  • 下载

串的模式匹配 经典KMP算法

KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用。由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作...

模式匹配KMP算法

  • 2014年04月13日 22:11
  • 28KB
  • 下载

字符串模式匹配KMP算法详解.doc

  • 2012年05月24日 13:15
  • 211KB
  • 下载

数据结构例程——串的模式匹配(KMP算法)

问题:串的模式匹配 KMP算法:#include #include "sqString.h" void GetNext(SqString t,int next[]) /*由模式串t求出next值...

模式匹配:KMP算法

  • 2014年07月23日 19:53
  • 2KB
  • 下载

模式匹配的KMP算法详解.

  • 2011年07月08日 08:28
  • 34KB
  • 下载

数据结构_串_串的模式匹配_KMP算法_C++实现

"head.h" #include #include using namespace std; class STRING { public: void GetString(); v...

模式匹配之KMP算法(Java版)

  • 2015年09月16日 11:55
  • 9KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串的模式匹配:KMP算法
举报原因:
原因补充:

(最多只允许输入30个字)