分析:一開始是用递归做的,没做出来。于是就换了如今的数组。即,把每个输入的字符串都存入二维数组中,然后创建字典树。输入和创建完成后,開始查找。
事实上一開始就读错题目了,题目要求字符串是由其它两个输入的字符串组成的前后缀,自己根本没有推断前缀是否满足。就直接推断后缀,一直想不通自己哪里错了,非常羞愧,水平还是不行。
查找分为前缀查找和后缀查找。事实上两个函数基本差点儿相同的。以下放代码。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
struct trie
{
trie *next[26];
int v; //字符同样的个数
trie()
{
memset(next,NULL,sizeof(next));
v=1;
}
};
trie *root=new trie();
char s[50001][101];
void creat_trie(char *str)
{
int i,id;
trie *p;
for(p = root,i=0;str[i]; ++i)
{
id = str[i]-'a';
if(p->next[id] == NULL)
{
p->next[id] = new trie();
}
p = p->next[id];
}
p->v = -1;
}
int find_trie(char *str)
{
int i=0,j,id;
trie *p = root;
for(;*str != '