思路简单直接:要满足兄弟的要求,长度要与之相等,且内容不能相同(重要!),且且二者排序后相等的就是兄弟了。

#include <string>
#include <string.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int n; string s;
    cin>>n;
    vector<string> vstr;
    vector<string> vbro;    //用来存储找到的兄弟单词
    for(int i = 0; i<n; i++ )
    {
        cin>>s; 
        vstr.push_back(s);
    }  
    cin >> s; cin >> n; 
    string s1 = s;    sort(s1.begin(),s1.end()); //s排序->s1
    vector<string>:: iterator itr;
    for(itr = vstr.begin(); itr != vstr.end(); ++itr)
    {
        if ((*itr).length() == s.length() && *itr != s) // 和被比较单词长度相等,内容不同的(!注意不能与之相等)
        {
            string tmp;
            for(char ch : *itr)    
                tmp.push_back(ch);   
            sort(tmp.begin(), tmp.end());   //vector中每个string排序
            if(s1 == tmp)    // 排序后相同的即为兄弟(if已经排除掉排序前就相同的单词)
                 vbro.push_back(*itr);   //兄弟单词压入<vector>vbro
        }           
    }
//     for(itr = vstr.begin(); itr != vstr.end(); ++itr)    cout<<*itr<<' ';
    sort(vbro.begin(), vbro.end());   //兄弟单词排序
    cout << vbro.size () <<endl;
    if(vbro.size() >= n)    
        cout << vbro[n-1];
    return 0;
}