字典树,一种存储字符串的结构,可以快速的找到某一字符串是否在字典树中。
int trie[SIZE][26],tot=1; //假设输入为26个小写字母
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];
}
endk[p]=true;
}
bool search(char* str) //查找是否在字典树中
{
int len=strlen(str),p=1;
for(int k=0;k<len;k++)
{
if(trie[p][str[k]-'a']==0) return false;
p=trie[p][str[k]-'a'];
}
return endk[p];
}
具体的应用例子:
#include<iostream>
#include<cstring>
using namespace std;
const int SIZE = 100;
int trie[SIZE][26], tot = 1;
bool endk[SIZE];
//插入字典树
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];
}
endk[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 endk[p];
}
int main()
{
char s[10];
for (int i = 0; i < 3; i++)
{
cin >> s;
insert(s);
}
cin >> s;
cout << search(s);
return 0;
}