题解 | #查找兄弟单词#很容易想的解法也不复杂
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <iostream>
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
unordered_map<char, int>u_map;//u_map记录target的字符情况
vector<string> findbrother(vector<string>&vec,int len,const string &target);
int main() {
u_map.clear();//全局变量记得清零
vector<string> vec;
string str,target;
int m,k;
cin>>m;
while(m--){
cin>>str;
vec.push_back(str);
}
cin>>target>>k;
for(int i = 0;i<target.size();i++){
u_map[target[i]]++;//记录
}
int len = target.size();
vector<string>result = findbrother(vec,len,target);//result就是拿到的结果
sort(result.begin(),result.end());//字典序排序
cout<<result.size()<<endl;
int showindex = k-1;
if(k<=result.size()){//检查有没有符合的k
cout<<result[showindex]<<endl;
}
}
vector<string> findbrother(vector<string>&vec,int len,const string &target){
vector<string>result;
for(string &str:vec){
if(str.size()!=len) continue;//兄弟单词的长度一致
if(str==target)continue;//本体不加入
unordered_map<char,int> temp = u_map;
bool isbro = true;//判断是否加入
for(int i = 0;i<str.size();i++){
temp[str[i]]--;
if(temp[str[i]]<0){
isbro = false;
break;
}
}
if(isbro){
result.push_back(str);
}
}
return result;
}
查看3道真题和解析
