关于Trie树:
Tries树详解及其应用
题目连接:hihoCoder#1014 我的AC代码:
#include <iostream>
#include <string>
typedef struct TrieNode
{
int count;
TrieNode *next[26];
}TTree_Node;
void Create(TTree_Node *& root)
{
root = new TTree_Node;
root->count = 0;
for (int i = 0; i < 26; ++i)
root->next[i] = NULL;
}
void Insert(TTree_Node *& root,std::string word)
{
int len = word.length();
TTree_Node *p=root;
for (int i = 0; i < len; ++i)
{
if (p->next[word[i] - 'a'] != NULL)
{
p = p->next[word[i] - 'a'];
p->count++;
}
else
{
TTree_Node *tempNode;
Create(tempNode);
p->next[word[i] - 'a'] = tempNode;
p = p->next[word[i] - 'a'];
p->count++;
}
}
}
int Search(TTree_Node * root, std::string word)
{
int len = word.length();
int i;
TTree_Node *p = root;
for (i = 0; i < len; ++i)
{
if (p->next[word[i] - 'a'] != NULL)
p = p->next[word[i] - 'a'];
else
break;
}
if (i == len)
return p->count;
else
return 0;
}
int main()
{
int n, m;
std::string str;
TTree_Node * root=NULL;
Create(root);
std::cin>>n;
while (n--)
{
std::cin >> str;
Insert(root, str);
str.clear();
}
std::cin>>m;
while (m--)
{
std::cin >> str;
std::cout << Search(root, str) << std::endl;
str.clear();
}
return 0;
}