题解 | #查找兄弟单词#

查找兄弟单词

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")

全部评论

相关推荐

10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务