字典树的应用。
其实这个题可以用map很简单的做出来,但字典树在解决这种求解字符串匹配由于暴力求解而造成的超时的闻听更为明显,所以更倾向这种方法。
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
struct Tree{
int next[26];
char english[12];
}cat[200004];
int temp;
char engl[12],fore[12];
void build(char *s,int site)
{
if(*s)
{
if(!cat[site].next[*s - 'a'])
cat[site].next[*s - 'a'] = ++ temp;
build(s + 1,cat[site].next[*s - 'a']);
}
else
strcpy(cat[site].english,engl);
}
void search(char *s,int site)
{
if(*s)
{
if(!cat[site].next[*s - 'a'])
{cout << "eh" << endl;return;}
search(s + 1,cat[site].next[*s - 'a']);
}
else
cout << cat[site].english << endl;
}
int main()
{
char str1[100];
while(gets(str1) && str1[0]){
sscanf(str1,"%s %s",engl,fore);
build(fore,0);
}
char str2[12];
while((scanf("%s",str2)) != EOF)
search(str2,0);
return 0;
}