题目描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序,而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。
现在给定你n个单词,另外再给你一个单词str,让你寻找str的兄弟单词里,字典序第k大的那个单词是什么?
注意:字典中可能有重复单词。本题含有多组输入数据。

#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    int num;
    while(cin>>num){
        vector<string> s;
        for(int i=0;i<num;i++){
            string input;
            cin>>input;
            s.push_back(input);
        }
        string target;
        cin>>target;
        int k;
        cin>>k;

        string target_s=target;//先保存好target
        sort(target.begin(),target.end());//target也要记得排序 这样s元素排序后与其对比
        vector<string> ans;
        for(auto i:s){
            if(i.size()==target.size()&&i!=target_s){//大小一致且不完全相同时再判断
                string temp=i;
                sort(temp.begin(),temp.end());//如果两者排序后一致,说明是兄弟
                if(temp==target)
                    ans.push_back(i);
            }
        }
        cout<<ans.size()<<endl;
        sort(ans.begin(),ans.end());
        if(k<=ans.size()) 
           cout<<ans[k-1]<<endl;
    }

}