题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <iostream> #include <string> #include <map> #include <vector> #include <algorithm> using namespace std; //用map计算单词中各个字母的个数 void toMap(string s, map<char, int> &Map){ if(!Map.empty()) Map.clear(); for (char i : s) { if(Map.count(i) == 0) Map.insert(make_pair(i, 0)); Map[i]+=1; } } int main() { int n, k, count; count = 0; cin >> n; vector<string> V, V_; string s, s_, res; //s目标单词,s_比对单词 while (n-- > 0) { cin >> s_; V.push_back(s_); } cin >> s >> k; map<char, int> Map, Map_; //Map中是目标单词的分解,Map_是比对单词的分解 toMap(s, Map); //分解目标单词,得到各个字母的个数 for (auto iter = V.begin(); iter != V.end(); iter++) { string item = *iter; //长度相等进入比较各个字母的个数是否相同 if (item.length() == s.length()) { toMap(item, Map_); //分解比对单词得到其各个字母的个数 bool flag = true; //true则字母和字母个数相同,则该单词为brother或与目标单词相同 for(char i : item){ //比对字母的个数 if(Map[i] != Map_[i]){ flag = false; break; } } if(flag && item != s){ count++; V_.push_back(item); } } } cout << count <<endl; if (count >= k) { sort(V_.begin(), V_.end()); //对所有brother字典排序 auto iter = V_.begin(); cout << *(iter+k-1) << endl; //获取第k个broter } } // 64 位输出请用 printf("%lld")