理想解法是用map判断兄弟,用插入排序排列字符串顺序。

不知道为什么但写了三个子函数;

sort用于原始字符串排列、重排字符顺序判断是否兄弟;

#include <iostream>
#include <vector>
#include <algorithm>
#include <cctype>
using namespace std;

// 判断是否兄弟字符串
bool isBro(string a, string x) {
    string sorted_a = a;
    string sorted_x = x;
    sort(sorted_a.begin(), sorted_a.end());
    sort(sorted_x.begin(), sorted_x.end());

    return sorted_a == sorted_x;
}

// 返回字符串数组中的兄弟字符串
vector<string> broS(vector<string> s, string x) {
    vector<string> res;
    for (auto& a : s) {
        if (a.length() != x.length()) continue;
        if (isBro(a, x) && a != x) res.push_back(a);
    }
    return res;
}

// 按字典序排列字符串数组,并打印数组长度以及第k个字符串
void sortBroS(vector<string> s, string x, int k) {
    vector<string> res = broS(s, x);
    sort(res.begin(), res.end());

    cout << res.size() << endl;

    if (k > 0 && k <= res.size()) {
        cout << res[k - 1] << endl;
    }
}

int main() {
    int N;
    cin >> N; // 读取字符串数量
    vector<string> ss(N); // 初始化vector大小为N

    // 读取字符串到vector
    for (int i = 0; i < N; i++) {
        cin >> ss[i];
    }

    string x;
    cin >> x; // 读取兄弟字符串

    int k;
    cin >> k; // 读取第k个字符串的索引

    sortBroS(ss, x, k); // 调用函数

    return 0;
}
// 64 位输出请用 printf("%lld")