码迷,mamicode.com
首页 > 编程语言 > 详细

KMP模式匹配算法

时间:2015-07-01 18:22:16      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

/*字符串匹配*/
#include<iostream>
using namespace std;

void get_next(string T,int *next)
{//朴素算法
	int i,j;
	i=1;
	j=0;
	next[1]=0;
	while(i<T.length())
	{
		if(j==0 || T[i]==T[j])
		{
			i++;
			j++;
			next[i]=j;
		}
		else
			j=next[j];
	}
}

void get_next_new(string T,int *next)
{//改进算法
	int i,j;
	i=1;
	j=0;
	next[1]=0;
	while(i<T.length())
	{
		if(j==0 || T[i]==T[j])
		{
			i++;
			j++;
			if(T[i]!=T[j])
				next[i]=j;
			else
				next[i]=next[j];
		}
		else
			j=next[j];
	}
}

int Index_KMP(string S,string T,int pos)
{
	int i=pos;
	int j=1;
	int next[255];
	get_next(T,next);
	while(i<=S.length() && j<=T.length()) 
	{
		if(j==0 || S[i]==S[j])
		{
			i++;
			j++;
		}
		else
			j=next[j];

	}
	if(j>T.length())
		return i-T.length();
	else
		return 0;
}

int main()
{
	string S="abcdefgab";
	string T="abcdex";
	cout<<Index_KMP(S,T,1);
	return 0;
}

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

KMP模式匹配算法

标签:

原文地址:http://blog.csdn.net/walker19900515/article/details/46711839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!