分析:读取所有字符串到字符数组中并存在map中建立映射,之后进入主循环,遍历每个字符串,按长度截取成两个字符串,分别在map中查找,如果找到了说明可以拆,进行下一个,不能继续找。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
char words[120010][30];
map<string,int> wmap;
int main()
{
int n=0;
while(~scanf("%s",words[n]))
{
wmap[words[n]]=1;
n++;
}
for(int i=0; i<n; i++)
{
int len = strlen(words[i]);
for(int j=0; j<len; j++)
{
char t1[30] = {0};
char t2[30] = {0};
strncpy(t1,words[i],j);
strncpy(t2,words[i]+j,len-j);
if(wmap[t1] && wmap[t2]){printf("%s\n",words[i]);break;}
}
}
return 0;
}