题意:给出一个词典,找出所有复合词,即恰好要两个单词组成的单词。输入每行都是一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过120000个单词。输出所有复合词,按照字典序从小到大排序。
思路:把所有单词放入set中,然后遍历set容器,暴力判断单词是否能由其他两个单词组成。
#include<bits/stdc++.h>
using namespace std;
set<string> s;
bool judge(string t)
{
int len = t.length();
for (int i = 1; i <= len - 1; i++)
{
if (s.count(t.substr(0, i)) && s.count(t.substr(i, len - i))) return true;
}
return false;
}
int main()
{
string word;
while (cin >> word)
{
s.insert(word);
}
for (auto i: s)
{
if (judge(i)) cout << i << endl;
}
return 0;
}