题目连接
https://www.acwing.com/problem/content/submission/837/
思路
我们通过trie树的结构将我们要插入的字符串插进去,但是要注意一点,最后我们要统计一下插入的字符串的个数,然后查找的时候同理,这个结构相当于每一层有26个字符
代码
#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000009
#define endl "\n"
#define PII pair<int,int>
int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
ll ksm(ll a,ll b) {
ll ans = 1;
for(;b;b>>=1LL) {
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
}
return ans;
}
ll lowbit(ll x){return -x & x;}
const int N = 2e6+10;
//----------------自定义部分----------------
int n;
int nextt[N][26],cnt,vis[N];
void insert(string S){
int l = S.size(),p = 0;
for(int i = 0;i < l; ++i) {
int c = S[i] - 'a';
if(!nextt[p][c]) nextt[p][c] = ++ cnt;
p = nextt[p][c];
}
vis[p]++;
}
int find(string S){
int l = S.size(),p = 0;
for(int i = 0;i < l; ++i){
int c = S[i] - 'a';
if(!nextt[p][c]) return 0;
p = nextt[p][c];
}
return vis[p];
}
int main()
{
cin>>n;
char op;
string s;
while(n--){
cin>>op>>s;
if(op == 'I') insert(s);
else cout<<find(s)<<endl;
}
return 0;
}