题意:给定一个词典,找出所有刚好由2个单词组成的单词,按字典序输出。
思路:由于单词数量为120000,所以二重循环将单词两两拼在一起是不可能的。而一个单词长度很短,远远达不到120000,所以可以考虑将一个单词拆成两个单词。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std;
int main() {
string x;
set<string> dic;
while(cin>>x) dic.insert(x);
for(set<string>::iterator it=dic.begin();it!=dic.end();it++){
x=*it;
string a,b;
for(int i=1;i<x.size();i++){
a=x.substr(0,i);
b=x.substr(i,x.size()-i);
if(dic.find(a)!=dic.end()&&dic.find(b)!=dic.end()){
cout<<x<<endl;
break;
}
}
}
return 0;
}
本文介绍了一种高效查找由两个词典中的单词组合而成的复合单词的方法。利用C++实现,通过遍历词典并将每个单词尝试拆分成两个部分,检查这两部分是否都存在于词典中。此方法避免了直接使用双重循环进行比较。
5432

被折叠的 条评论
为什么被折叠?



