KMP方式匹配算法

KMP模式匹配算法
/*字符串匹配*/
#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;
}

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