/* 思路: 使用vector<string>保存兄弟单词, 问题关键是如何判断是否是兄弟单词 1. 判断长度是否相同 2. 判断字符串是否相同,相同的不是 3. 判断两个字符串上每个字符出现的次数是否一样。 使用sort排序,之后检查排序后的字符串是否相同 */ #include <algorithm> #include <iostream> #include <set> #include <vector> using namespace std; // 通过排序算法判断是否是兄弟单词。 bool isBro(string s1, string s2){ // 首先看长度是否一样,长度一样才有可能 if(s1.length() != s2.length()){ return false; } // 然后看是否是相同的字符串,相同字符串则不是兄弟单词 if(s1 == s2){ return false; } // 最后我们对两个字符串分别以各自的字符排序,这样两个字符串都是一样的顺序,只要字符集和各个字符数量对得上,排序出来的单词应该是一样的,这就是兄弟单词。 sort(s1.begin(), s1.end()); sort(s2.begin(), s2.end()); return s1==s2; } int main() { int n; cin >> n; string str; // vector保存输入的全部单词, vector<string> v; for(int i = 0; i < n; i++){ cin >> str; v.push_back(str); } cin >> str; cin >> n; vector<string> s; // 遍历这个vector,对每一个单词判断是否是str的兄弟单词 for(auto it : v){ if(!isBro(it, str)){ continue; } s.push_back(it); } sort(s.begin(), s.end()); cout << s.size() << endl; if(s.size()>0){ cout << s[n-1] << endl; } return 0; } // 64 位输出请用 printf("%lld")