- 兄弟串得一个技巧。(check函数)
- 进入之前就把条件设置好,如长度必然相等,然后彼此之间不等。
- 注意最后size()==0得情况。(无法输出第k得,所以要注意异常值处理)
#include<bits/stdc++.h>
using namespace std;
bool check(string s, string t){
int arr[26] = {0};//一个小技巧来判断是否是兄弟串。
for(int i=0; i< s.size(); i++){
arr[s[i]-'a']++;
arr[t[i]-'a']--;
}
for(int i =0; i<26;i++){
if(arr[i]!=0) return false;
}
return true;
}
int main(){
int N,k;
while(cin>>N){
vector<string> v;
for(int i=0; i< N;i++){
string s; cin>>s;
v.push_back(s);
}
string str; cin>>str;
cin>>k;
int sum =0;
vector<string> res;//最终得兄弟串
for(int i =0; i< N; i++){
if( (v[i].size()==str.size()) && v[i]!=str){//长度必然一样,但是不能完全一样
if(check(v[i],str)){
res.push_back(v[i]);
}
}
}
sort(res.begin(), res.end());
cout<<res.size()<<endl;
if(res.size()!=0){
cout<<res[k-1]<<endl;
}
}
return 0;
}