#include <stdio.h>
#include <cstring>char str[50002][110];
struct Node
{
Node *next[26];
int v;
Node(){
v = 0;
memset(next, 0, sizeof(next));
}
};Node *root = new Node;
void Insert(char *s)
{
Node *p = root;
int len = strlen(s), id;
for(int i = 0; i < len; i++)
{
id = s[i] - 'a';
if(p->next[id] == 0)
p->next[id] = new Node;
p = p->next[id];
}
p->v = 1; //标记为叶子节点
}bool search(char *s)
{
int len = strlen(s), id;
Node *p = root;
for(int i = 0; i < len; i++)
{
id = s[i] - 'a';
if(p->next[id] == 0)
return false;
p = p->next[id];
}
if(p->v == 1) //必须要判断是否是叶子节点
return true;
else
return false;
}int main()
{
char a[100], b[100];
int cnt = 0;
while(~scanf("%s", str[cnt]))
{
Insert(str[cnt]);
cnt++;
}
for(int i = 0; i < cnt; i++)
{
int len = strlen(str[i]);
for(int j = 1; j < len; j++)
{
memset(a, '\0', sizeof(a));
memset(b, '\0', sizeof(b));
strncpy(a, str[i], j); //将str[i]的前j个字符复制到a中
strncpy(b, str[i]+j, len-j); //将str[i]的后len-j个字符赋值到b中
if(search(a) && search(b))
{
printf("%s\n", str[i]);
break;
}
}
}
return 0;
}
Hat’s Words HDU - 1247 (字典树)
猜你喜欢
转载自blog.csdn.net/mch2869253130/article/details/82221245
今日推荐
周排行