题目描述
定义一个单词的“兄弟单词”为:交换该单词字母顺序,而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: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; } }