字典树算法讲解可以看其他题解 这里给出一版比较简单的代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
const int N=1e6+1;
char s[N];
int ch[N][70],cnt[N],idx;
void insert(string s){
int p=0;
for(int i=0;s[i];i++){
int j;
j=s[i]-'A';
if(!ch[p][j]){
ch[p][j]=++idx;
}
p=ch[p][j];
cnt[p]++;
}
//cnt[p]++;
}
int query(string s){
int p=0;
for(int i=0;s[i];i++){
int j=s[i]-'A';
if(!ch[p][j]) return 0;
p=ch[p][j];
}
return cnt[p];
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,q;
cin >> n >> q;
for(int i=0;i<n;i++){
string s;
cin >> s;
insert(s);
}
for(int i=0;i<q;i++){
string x;
cin >> x;
cout << query(x) << '\n';
}
}



京公网安备 11010502036488号