https://cn.vjudge.net/problem/UVA-10391#author=linkin
题目大意:给出一个字典,找出所有的复合词,即恰好有两个单词拼接成的单词。
分析:注意考虑超时问题,一一枚举肯定超时,需要用set存储字典,将每个字符串拆开(拆开字符串的长度次数),然后在set中查找拆开的两字符串是否存在。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("i.txt","r",stdin);
string str;
set<string> s;
while(cin >> str)
s.insert(str);
for(auto it=s.begin(); it!=s.end(); it++) {
for(int i = 0; i < it->size()-1; i++) {
string t1 = it->substr(0,i+1);
string t2 = it->substr(i+1);
if(s.find(t1)!=s.end() && s.find(t2)!=s.end()) {
cout << *it << endl;
break;
}
}
}
return 0;
}