字典树一般用来查询一个字符串a,问有多少个字符串以a为前缀
用二维数组存储,每个节点都编号,num数组记录以节点结尾的前缀有多少个
例如分别插入
banana
band
bee
#include<bits/stdc++.h>
using namespace std;
int tree[1000005][26];
int num[1000005], pos=1;
void insert(string c)
{
int k = 0, t;
for(int i = 0; i < c.length(); i++)
{
t = c[i] - 'a';
if(tree[k][t] == 0)
tree[k][t] = pos++;
k = tree[k][t];
num[k]++;
}
}
int find(string c)
{
int k = 0, t;
for(int i = 0; i < c.length(); i++)
{
t = c[i] - 'a';
if(tree[k][t] == 0) return 0;
k = tree[k][t];
}
return num[k];
}
int main()
{
string a;
while(cin >> a)
insert(a), cout << find("abc") << endl;
return 0;
}