原题链接:https://vjudge.net/problem/19793/origin
思路:题目要求求出是输入数据中两个单词串联起来在输入数据中的单词。由于暴力遍历输入,将两个单词串联时间复杂度太高,会超时,所以反向思考,将每个单词分解成两个单词看符不符合条件,采用set存输入单词。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
const int maxn = 120010;
int main()
{
set<string> s;
string str;
while(cin>>str)
{
s.insert(str);
}
string s1,s2;
set<string>::iterator it;
for(it= s.begin();it!=s.end();it++)
{
int len = (*it).length();
for(int i=0;i<len;i++)
{
s1=(*it).substr(0,i+1);
s2=(*it).substr(i+1,len-i-1);
if(s.find(s1)!=s.end()&&s.find(s2)!=s.end())
{
cout<<*it<<endl;
break;
}
}
}
}