字典树(Trie)模板

字典树是一种用于字符串快速索引的树结构。

字典树最基础的应用——查找一个字符串是否在“字典”中出现过。

#include 
#include 
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;
}

你可能感兴趣的:(#,算法模板,#,0x10,基本数据结构)