HDU--2087 剪花布条

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_Qin_AC/article/details/83086810

# include<stdio.h>
# include<string.h>
# include<algorithm>
using namespace std;
# define maxn 1200
char s[maxn];
char z[maxn];
int a[maxn];
int ls,lz,sum;
void abc(){
	int i=1,j=0;a[0]=0;
    while(i<lz){
    	if(z[i]==z[j]){
    		a[i++]=++j;
		}
		else if(j==0){
			i++;
		}
		else{
			j=a[j-1];
		}
	}
}
int kmp(){
	sum=0;
	int i=0,j=0;
	for(i=0;i<ls;i++){
		while(j&&s[i]!=z[j]){
			j=a[j-1];
		}
		if(s[i]==z[j]){
			j++;
		}
		if(j==lz){
			sum++;
			j=0;
		}
	}
	return sum;
}
int main(){
	   while(scanf("%s",s)){
	   	if(s[0]=='#'){
	   		break;
		   }
	   
	   scanf("%s",z);
		ls=strlen(s);
		lz=strlen(z);
		abc();
		printf("%d\n",kmp());
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/Mr_Qin_AC/article/details/83086810