- 兄弟串得一个技巧。(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; }