AcWing 835. Trie字符串统计
原题链接
简单
作者:
minux
,
2020-04-23 18:03:39
,
所有人可见
,
阅读 450
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int SON[N][26]; // 单词的长度不超过N, 每一位单词有26种选择, 使用N x 26的矩阵存储单词
int REC[N];
int idx;
int m;
// 插入操作
void insert(string word){
int p=0; // 单词指针
for(int i=0; i<word.size(); ++i){
int c = word[i]-'a';
if(!SON[p][c]){
SON[p][c]=++idx; // 单词的下一个字符在idx处
}
p=SON[p][c];
}
REC[p]++;
}
// 查询操作
int query(string word){
int p=0;
for(int i=0; i<word.size(); ++i){
int c=word[i]-'a';
if(!SON[p][c])
return 0;
else
p=SON[p][c];
}
return REC[p];
}
int main(){
memset(SON, 0x00, sizeof SON);
memset(REC, 0x00, sizeof REC);
cin>>m;
string P;
string word;
while(m--){
cin>>P>>word;
if(P=="I")
insert(word);
else if(P=="Q")
cout<<query(word)<<endl;
}
return 0;
}