姚 * 夫出版
【题目描述】
给出两个字符串s1,s2((只有大写字母),求s1在s2中出现多少次。
例如:s1="ABA",s2="ABAABA",答案为=2。
【输入】
输入T组数据,每组数据输出结果。
【输出】
如题述。
【输入样例】
3
BAPC
BAPC
AZA
AZAAZAAZA
VEEDI
AVERDXIVYERDLAN
【输出样例】
1
3
0
【提示】
1≤s1的长度 ≤10000 ,1≤s2的长度 ≤1000000 。
【输出样例】
#include<bits/stdc++.h>
using namespace std;
unsigned long long b=31,h1,h2[1000005],power[1000005];
char s1[100005],s2[1000005];
int main(){
int t;
cin>>t;
int js=0;
power[0]=1;
for(int i=1;i<=1000005;i++){
power[i]=power[i-1]*b;
}
while(t--){
js=0;
cin>>s1+1>>s2+1;
int len1=strlen(s1+1);
int len2=strlen(s2+1);
h1=0;
memset(h2,0,sizeof(h2));
for(int i=1;i<=len1;i++)
h1=h1*b+(unsigned long long)(s1[i]-'A'+1);
for(int i=1;i<=len2;i++)
h2[i]=h2[i-1]*b+(unsigned long long)(s2[i]-'A'+1);
for(int i=0;i<=len2-len1;i++)
if(h1==h2[i+len1]-h2[i]*power[len1])js++;
cout<<js<<endl;
}
return 0;
}