思路简单直接:要满足兄弟的要求,长度要与之相等,且内容不能相同(重要!),且且二者排序后相等的就是兄弟了。
#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;
}

京公网安备 11010502036488号