Hash!

Panda一个字符串是否是另一个字符串的子串

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353,tt=4567;
long long hash[10005],h,p[10005];
char s1[10005];
char s2[10005];
int H(int l,int r){
	return (hash[r]-(hash[l-1]*p[r-l+1])%mod+mod)%mod;
}
int main(){
	scanf("%s",s1+1);
	scanf("%s",s2+1);
	int l1=strlen(s1+1);
	int l2=strlen(s2+1);
	for(int i=1;i<=l1;i++) h=(h*tt+s1[i])%mod;
	hash[1]=s2[1];p[1]=tt;
	for(int i=2;i<=l2;i++) hash[i]=(hash[i-1]*tt+s2[i])%mod,p[i]=(p[i-1]*tt)%mod;
	for(int i=1;i+l1-1<=l2;i++){
		if(h==H(i,i+l1-1)){
			printf("yes");
			return 0;
		}
	}
	printf("no");
	return 0;
}
/*
prprprprprpprprprprppr
rpprprprprprprprprprpprprprprprpprpr
*/

  

猜你喜欢

转载自www.cnblogs.com/sroht/p/9894112.html