题解 | #查找兄弟单词#
查找兄弟单词
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")
查看8道真题和解析
小天才公司福利 1176人发布