字典树是一种用于字符串快速索引的树结构。
字典树最基础的应用——查找一个字符串是否在“字典”中出现过。
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e6 + 5;
int trie[N][26], tot = 1;//初始化
bool exist[N];//以该结点结尾的字符串是否存在
char str[N];
void insert(char* str)//插入一个字符串
{
int len = strlen(str), p = 1;
for (int k = 0; k < len; k++){
int ch = str[k] - 'a';
if (trie[p][ch] == 0)
trie[p][ch] = ++tot;
p = trie[p][ch];
}
exist[p] = true;
}
bool search(char* str)//检索字符串是否存在
{
int len = strlen(str), p = 1;
for (int k = 0; k < len; k++){
p = trie[p][str[k] - 'a'];
if (p == 0)
return false;
}
return exist[p];
}
int main(void)
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> str;
insert(str);
}
for (int i = 0; i < m; i++){
cin >> str;
cout << search(str) << endl;
}
return 0;
}