题意:给一些单词,问哪些单词能有另外两个单词组成
思路:先去找一个单词的前缀,去除前缀后再去找单词的后缀
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; struct node { int count; node *next[26]; }*root; char str[50010][50]; void insert(char *s) { node *p = root; while(*s) { int id = *s-'a'; if(p->next[id]==NULL) p->next[id] = new node(); p = p->next[id]; s++; } p->count = 1; } int find2(char *s) { node *p = root; while(*s) { int id = *s-'a'; p = p->next[id]; if(p!=NULL) { if(p->count==1&&*(s+1)=='\0') return 1; s++; } else return 0; } return 0; } int find(char *s) { node *p = root; while(*s) { int id = *s-'a'; p = p->next[id]; if(p!=NULL) { if(p->count==1&&find2(s+1)) return 1; s++; } else return 0; } return 0; } int main() { root = new node(); int t = 0; while(cin>>str[t]) { insert(str[t]); t++; } for(int i = 0; i < t; i++) { if(find(str[i])) { cout<<str[i]<<endl; } } return 0; }