题目连接:Word Amalgamation
具有相同字母,但顺序不同的单词都在一个词条下,查找时,索引相同的按字典序输出
例如trap,trap,aptr都在一个词条下,可以用sort做索引,首先想到的是hash
后来查了一下,很多用的map<string,string>,second记录sort之后的索引,first记录原单词,这是因为map默认按first升序排列
先用first找到相应的词条,再一个个比较
#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
map<string,string>m;
map<string,string>::iterator it;
string s1,s2;
bool tag;
while(cin>>s1&&s1!="XXXXXX"){
s2=s1;
sort(s2.begin(),s2.end());
m.insert(make_pair(s1,s2));
}
//for(it=m.begin();it!=m.end();++it)cout<<it->first<<" "<<it->second<<endl;
while(cin>>s1&&s1!="XXXXXX"){
tag=false;
sort(s1.begin(),s1.end());
for(it=m.begin();it!=m.end();++it){
if(it->second==s1){
cout<<it->first<<endl;
tag=true;
}
}
if(!tag)cout<<"NOT A VALID WORD"<<endl;
cout<<"******"<<endl;
}
return 0;
}