给出两个字符串s1,s2((只有大写字母),求s1在s2中出现多少次。
例如:s1="ABA",s2="ABAABA",答案为2。
输入
输入T组数据,每组数据输出结果。
输出
如题述。
样例
输入
3 BAPC BAPC AZA AZAAZAAZA VEEDI AVERDXIVYERDLAN
输出
1 3 0
提示
1≤s1 的长度 ≤10^4 ,1≤s2的长度 ≤10^6
———————————————————————————————————————————AC代码:
#include<bits/stdc++.h>
using namespace std;
long long t;
const long long b=1000009;
unsigned long long power[1000009],sum[1000009],s;
int main()
{
power[0]=1;
for(int i=1;i<1000000;i++)
{
power[i]=power[i-1]*b;
}
cin>>t;
for(int k=1;k<=t;k++)
{
string s1,s2;
cin>>s1>>s2;
int l1=s1.size(),l2=s2.size();
int ans=0;
sum[0]=s2[0]-'A'+1;
for(int i=1;i<l2;i++)
{
sum[i]=sum[i-1]*b+(unsigned long long)(s2[i]-'A'+1);
}
s=0;
for(int i=0;i<l1;i++)
{
s=s*b+(unsigned long long)(s1[i]-'A'+1);
}
for(int i=-1;i<=l2-l1-1;i++)
{
if(s==(sum[l1+i]-sum[i]*power[l1])) ans++;
}
cout<<ans<<endl;
}
return 0;
}