变位词是形如以下的单词 eat tea 和 silent listen 互为变位词,那么对于一个单词的集合怎样快速的把变位词分离出来呢
首先把 单词的每个字符进行排序,这样所有的变位词就有了相同的序列,然后在对这些进行序列进行一次排序。
这样就把这些变位词分离出来了。
时间复杂度 nlogn
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct node
{
string sstr;
string ssort;
}node;
int comp(node a,node b)
{
return a.ssort<b.ssort;
}
int main()
{
int n;
while(cin>>n)
{
vector<node> coll;
for(int i=1;i<=n;i++)
{
string temp1,temp2;
cin>>temp1;
temp2=temp1;
sort(temp2.begin(),temp2.end());
coll.push_back(node{temp1,temp2});
}
sort(coll.begin(),coll.end(),comp);
string sym=coll[0].ssort;
for(int i=0;i<coll.size();i++)
{
if(coll[i].ssort==sym)
cout<<coll[i].sstr<<" ";
if(i+1<coll.size()&&coll[i+1].ssort!=sym)
{
sym=coll[i+1].ssort;
cout<<endl;
}
}
cout<<endl;
}
}