在一个没有空格的文章中查找一个特定单词的出现次数。
字符hash简单过。也可以用kmp。
代码:
//Memory: 16904K Time: 250MS
//Language: C++ Result: Accepted
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef unsigned long long ll;
const int MAXN=1000005;
const int base=31;
ll hash[MAXN];
ll xp[MAXN];
char w[10005];
char t[1000005];
int main(){
//freopen("in.txt","r",stdin);
int T; cin>>T;
xp[0]=1;
for(int i=1;i<=MAXN;i++){
xp[i]=xp[i-1]*base;
}
while(T--){
ll w_hash=0;
scanf("%s%s",w,t);
int lw=strlen(w),lt=strlen(t);
for(int i=lt-1;i>=0;i--){
hash[i]=hash[i+1]*base+t[i]-'A'+1;
}
for(int i=lw-1;i>=0;i--){
w_hash=w_hash*base+w[i]-'A'+1;
}
int ans=0;
for(int i=0;i+lw<=lt;i++){
if(w_hash==(hash[i]-hash[i+lw]*xp[lw]))
ans++;
}
cout<<ans<<endl;
}
return 0;
}