题解 | #查找兄弟单词#

查找兄弟单词

https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
    int n, res = 0;
    cin >> n;
    vector<string> dict;
    for (int i = 0; i < n; i++) {
        string tmp;
        cin >> tmp;
        dict.push_back(tmp);
    }
    string tar;
    cin >> tar;
    int tar_len = tar.size();
    int k;
    cin >> k;
    map<string, int> mp;

    vector<int> bro(26, 0);
    for (int i = 0; i < tar_len; i++) {
        bro[static_cast<int>(tar[i] - 'a')]++;
    }

    for (int i = 0; i < n; i++) {
        bool fa = true;
        string tmp = dict[i];
        vector<int> tm(26, 0);
        int lens = tmp.size();

        for (int j = 0; j < lens; j++) {
            tm[tmp[j] - 'a']++;
        }
        for (int j = 0; j < 26; j++) {
            if (bro[j] != tm[j]) {
                fa = false;
            }
        }
        // cout << fa << endl;
        if (fa && tar != tmp) {
            res++;
            if (mp.find(tmp) == mp.end()) {
                mp[tmp] = 1;
            } else {
                mp[tmp]++;
            }
        }
    }

    cout << res << endl;
    for (const auto& j : mp) {
        if (k > j.second) {
            k -= j.second;
        } else {
            cout << j.first << endl;
            break;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

和查找相关的题目一般都会考虑哈希表。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务