题目链接见:http://hihocoder.com/problemset/problem/1014?sid=1174617
trie树用来进行字符串匹配非常好用,hihocoder题目链接里面也有对trie树的介绍,代码编写思路跟问题中的提示相同。
AC代码
#include <iostream>
#include<string>
#include<stdio.h>
using namespace std;
typedef struct node
{
struct node *child[26];
long int num;
}Node;
Node *CreateNode()
{
int i;
Node *p=new Node;
for(i=0;i<26;i++)
{
p->child[i]=NULL;
}
p->num=0;
return p;
}
void InsertNode(string str,Node *head)
{
long int i;
Node *t,*p;
p=head;
p->num++; //root num add
for(i=0;i<str.length();i++)
{
if(p->child[str[i]-'a']==NULL)
{
t=CreateNode();
p->child[str[i]-'a']=t;
p=p->child[str[i]-'a'];
}
else
{
p=p->child[str[i]-'a'];
}
p->num++;
}
}
long int SearchNode(string str,Node *head)
{
long int i,Count;
Node *p=head;
for(i=0;i<str.length();i++)
{
if(p->child[str[i]-'a']==NULL)
{
return 0;
}
else
{
p=p->child[str[i]-'a'];
Count=p->num;
}
}
return Count;
}
int main()
{
long int time,i;
string str;
Node *root;
root=CreateNode();
freopen("input.txt","r",stdin);
cin>>time;
while(time--)
{
cin>>str;
InsertNode(str,root);
}
cin>>time;
while(time--)
{
cin>>str;
cout<<SearchNode(str,root)<<endl;
}
return 0;
}