理想解法是用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")