#include<iostream>
#include<sstream>
#include <string.h>
using namespace std;
template <typename T>
class Node
{
public:
T c;
Node<T> * child[26];
Node();
};
template <typename T>
Node<T>::Node()
{
for (int i =0; i < 26; i++)
{
this->child[i]=NULL;
}
this ->c =0;
}
template <typename T>
T build(char *s, Node<T>* root)
{
Node<T> *p =root;
for (int i = 0; s[i]!='\0'; i++)
{
int t = s[i]-'a';
if (p->child[t] == NULL)
{
Node<T> *q =new Node<T>;
p ->child[t] = q;
}
p = p->child[t];
p->c ++;
}
return 0;
}
template <typename T>
T solve( char *s ,Node<T> * root)
{
Node<T> * p = root;
for (int i = 0; s[i]!='\0'; i++)
{
int t = s[i]-'a';
if (p->child[t] == NULL)
{
return 0;
}
else
{
p=p->child[t];
}
}
return p->c;
}
int main(int argc , const char * argv[])
{
Node<int> * root =new Node<int>;
int n,m;
cin>>n;
char a[11];
for (int i = 0; i <n; i++)
{
cin>>a;
build<int>(a, root);
}
cin>>m;
for (int i = 0; i <m; i++)
{
cin>>a;
cout<<solve<int>(a, root)<<endl;
}
return 0;
}
c++字典树 Trie树(hihocoder1014)
最新推荐文章于 2019-02-02 21:28:41 发布