变位词快速分离

来源:互联网 发布:浏览器 网络连接错误 编辑:程序博客网 时间:2024/06/04 21:55

变位词是形如以下的单词 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; }}



        

原创粉丝点击