题解 | #查找兄弟单词#很容易想的解法也不复杂

查找兄弟单词

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;
}

全部评论

相关推荐

01-12 20:31
东北大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务