奇妙的方法
使用一个map和一个multimap
先使用multimap存下所有排序后相同的字符串
遍历multimap,如果当前这个排序后序列只有一个对应的原字符串,将它的原序列加入另一个map桶排输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <algorithm> #include <iostream> #include <map> using namespace std; typedef multimap<string,string>::iterator miter; string buf; map<string,string> b2a; multimap<string,string> a2b; int main(){ while(cin>>buf&&buf!="#"){ string backup = buf; for(int i=0;i<buf.size();i++){ buf[i] = tolower(buf[i]); } sort(buf.begin(),buf.end()); a2b.insert(make_pair(buf,backup)); } for(miter iter=a2b.begin();iter!=a2b.end();){ pair<miter,miter> er = a2b.equal_range(iter->first); if(distance(er.first,er.second)==1) b2a[iter->second] = iter->first; iter = er.second; } for(map<string,string>::iterator iter=b2a.begin();iter!=b2a.end();iter++){ cout << iter->first << endl; } return 0; }
|