分析:一開始是用递归做的,没做出来。于是就换了如今的数组。即,把每个输入的字符串都存入二维数组中,然后创建字典树。输入和创建完成后,開始查找。
事实上一開始就读错题目了,题目要求字符串是由其它两个输入的字符串组成的前后缀,自己根本没有推断前缀是否满足。就直接推断后缀,一直想不通自己哪里错了,非常羞愧,水平还是不行。
查找分为前缀查找和后缀查找。事实上两个函数基本差点儿相同的。以下放代码。
#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 != '