一道关于set的水题,按输入顺序遍历就可以按照字典序输出
一开始用了二重循环结果TLE了。
后来发现可以直接一重循环搞定。
TLE代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <vector>
using namespace std;
set<string> s;
vector<string> vt;
int main(){
string str;
while(cin>>str){
vt.push_back(str);
s.insert(str);
}
int len = vt.size();
for(int i = 0;i<len;i++){
for(int j=0;j<len;j++){
if(j==i) continue;
string con = vt[i] + vt[j];
if(s.count(con)) cout<<con<<endl;
}
}
return 0;
}
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <vector>
using namespace std;
set<string> s;
vector<string> vt;
int main(){
string str;
while(cin>>str){
vt.push_back(str);
s.insert(str);
}
int len = vt.size();
for(int i = 0;i<len;i++){
for(int j = 1;j<vt[i].length();j++){
if(s.count(vt[i].substr(0,j))&&s.count(vt[i].substr(j,vt[i].length()-j))){
cout<<vt[i]<<endl;break;
}
}
}
return 0;
}
原文地址:http://blog.csdn.net/iboxty/article/details/45958193