【HDU】2087 剪花布条 (KMP算法的应用)

可以参考:从头彻尾彻底理解KMP

可以用朴素的模式匹配算法,也可以使用KMP算法,KMP算法所用的时间较短

普通版

#include 
#include 

using namespace std;

int main ()
{
	string s1,s2;
	while(cin >> s1)
	{
		if(s1=="#")
			return 0;
		cin >> s2;
		int i=0;
		int j=0;
		int cnt=0;
		while(i

KMP


#include 
#include 
#include 

using namespace std;

int nextt[1005];
string s1,s2;
int cnt;

void getnext()
{
	memset(nextt,0,sizeof(nextt));
	int i=0,j=-1;
	nextt[0]=-1;
	while(i>s1)
	{
		if(s1=="#")
			break;
		cin >> s2;
		getnext();
		cnt=0;
		KMP_search();
		cout << cnt << endl;
	}
	return 0;
} 

在这里需要注意,在KMP算法匹配成功时,i已经指向匹配成功的下一个字符,而 j 等于模式串的长度(已经指出去了),所以想要继续往后匹配的话,j=0,而不是j=next[j](这样计算的是可重叠的,例如,aaaaaa aa,输出的是5,答案要求是3)。

你可能感兴趣的:(HDU)