这道题的题目描述简直。。。无语子,后来看了评论区的大佬解释在明白什么意思。
本题的题意是,先输入n个字符串,然后再输入一个字符串str,找这个str在之前n个字符串中的兄弟单词,被找到的兄弟单词要按字典顺序如abcdefg...排序,最后输入共有过少个兄弟单词,以及按字典顺序排好序以后的第n个(n从1开始算起)单词是什么?
解题思路:只是提供一个思路,这不一定是最好的,反正我只能想到这个。
通过容器map来记录每个单词中的字母出现次数如{a:1,b:2,c:1,d:4},如果两个单词的字母出现次数完全相同,但这两个单词不同,那么这两个单词就是兄弟单词,最后把找到的兄弟单词单独存放在一个vector容器中,并按字典顺序排序,最后输出就可以了

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,m;        //n代表开始输入的数字,m代表最后输入的数字
    cin>>n;        //输入n
    cin.get();    //从键盘缓冲区读出换行符
    string text,key;    //text代表输入的前n个单词,key代表输入的最后一个单词
    vector<string> vec,vec_;    //向量vec和vec_分别存放一开始输入的单词组和兄弟单词组
    for(int i=0;i<n;i++) {
        cin>>text;        //依次输入前n个单词
        cin.get();        //每次输入后从键盘缓冲区读出换行符
        vec.push_back(text);        //用容器vec保存输入的单词组
    }
    cin>>key;    //输入待查找的单词
    cin>>m;        //输入最后的数字
    map<char, int> map1;    //用容器mapjil每个单词的字符出现情况
    map<char, int>::iterator it;        //迭代器
    for(int i=0;i<key.length();i++) {
        it = map1.find(key[i]);
        if(it != map1.end())        //如果找到了键为key[i]的键值对,将值+1
            it->second++;
        else
            map1[key[i]] = 1;        //否则,新生成一个{key[i], 1}的键值对
    }
    for(int i=0;i<vec.size();i++) {    //分析容器vec中每个单词的字符出现情况
        map<char, int> map2;
        for(int j=0;j<vec[i].length();j++) {
            it = map2.find(vec[i][j]);
            if(it != map2.end())
                it->second++;
            else
                map2[vec[i][j]] = 1;
        }
        if(vec[i] != key && map1 == map2)    //如果某个单词与待查找的单词不同,并且字符出现情况一致,那么这个单词是星弟单词,将这个单词保存到容器vec_中
            vec_.push_back(vec[i]);
    }
    sort(vec_.begin(), vec_.end());    //对容器vec_中的单词按字典顺序排序
    cout<<vec_.size()<<endl;        //打印容器vec_的大小,即为找到的星弟单词的个数
    if(m<=vec_.size())            //打印第m个单词,如果没有符合第m个的话就不用打印了
        cout<<vec_.at(m-1)<<endl;
    return 0;
}