AcWing 142. 前缀统计
原题链接
简单
作者:
周哲宇
,
2024-10-24 15:51:44
,
所有人可见
,
阅读 3
#include <iostream>
using namespace std;
const int N = 1000010;
int son[N][26], cnt[N], idx = 0;
void insert(string str){
int p = 0;
for (int i = 0; i < str.length(); i++){
int u = str[i] - 'a';
if (! son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
cnt[p] ++;
}
int query(string str){
int p = 0, ans = 0;
for (int i = 0; i < str.length(); i++){
int u = str[i] - 'a';
if (! son[p][u]) return ans;
p = son[p][u];
ans += cnt[p];
}
return ans;
}
int main(){
int n, m;
cin>>n>>m;
while (n--){
string str;
cin>>str;
insert(str);
}
while (m--){
string qry;
cin>>qry;
cout<<query(qry)<<endl;
}
}