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