GreensnoWorld
记录点滴,分享乐趣,一块凝固的时间
0065.串模式匹配KMP优化算法C++语言实例
数据结构与算法  2022年4月5日
#include <iostream>
#include <cstring>
using namespace std;
int index(char *s, char *t);
void get_next(char *s, int tlen, int next[]);

int main()
{
	char s[] = "acabaabaabcacaabc";
	char t[] = "abaabc";
	cout << "Position: " << index(s, t) << endl;
}
int index(char *s, char *t)
{
	int i=1, j=1;
	int slen = strlen(s);
	int tlen = strlen(t);
	int next[tlen+1];
	get_next(t, tlen, next);
	while(i<=slen && j<=tlen)
	{
		if(j==0 || s[i-1]==t[j-1])
		{
			i++;
			j++;
		}
		else
		{
			j = next[j];
		}
	}
	if(j>tlen)
		return i-tlen;
	else
		return -1;
}
void get_next(char *t, int tlen, int next[])
{
	int i=1, j=0;
	next[1] = 0;
	while(i<tlen)
	{
		if(j==0 || t[i-1]==t[j-1])
		{
			i++;
			j++;
			if(t[i-1] != t[j-1])
			{
				next[i] = j;
			}
			else
			{
				next[i] = next[j];
			}
		}
		else
		{
			j = next[j];
		}
	}
}
LIJG
余本顽劣,生于紫云下,长于汝水滨。早年求学,兴趣广泛,好高骛远,学无所成,仓皇入世。兴趣所致,投身互联网,求知未证,而立已至,始悟光阴荏苒,终需务实钻研。故有此站,记录时光,积累点滴,验证所学,分享愚见。指舞方寸间,心系万千年。
留言