面试题 17.07. 婴儿名字

链接:. - 力扣(LeetCode)

题解:

class Solution {
public:
    vector<string> trulyMostPopular(vector<string>& names, vector<string>& synonyms) {
        UnionFind uf;
        for (auto& syn : synonyms) {
            //cout << "syn:" << syn << endl;
            auto syn_name = split_name(syn);
            uf.add(syn_name.first);
            uf.add(syn_name.second);
            // 将这两个节点放入一个group
            uf.merge(syn_name.first, syn_name.second);
        }
        //
        std::unordered_map<std::string, std::set<People>> fathers;
        std::unordered_map<std::string, int> fathers_count;
        // 遍历所有名字
        for (auto& name : names) {
            People people;
            split(name, people);
            std::string father = uf.get_father(people.name);
            // 获得父亲,并且按照字典序列进行排序
            fathers[father].insert(people);
            //cout << "nnnnn: " << people.name << endl;
            // 统计按照group父亲节点,总数量
            fathers_count[father] += people.count;
        }
        std::vector<std::string> result;
        for (auto& father : fathers) {
            // 获得字典序的第一个名字
            std::string str = father.second.begin()->name;
            //cout << "str:" << str << endl;
            // 获得总数量
            str = str + "(" + to_string(fathers_count[father.first]) + ")";
            // 追加结果
            result.push_back(str);
        }
        return result;
    }
private:
struct People {
    People() {
        count = 0;
    }
    std::string name;
    int count = 0;
    // 按照字典序列进行排序
    bool operator < (const People& people) const {
        return name < people.name;
    }
};
    void split(string& str, People& people) {
        auto it = str.find("(");
        people.name = str.substr(0, it);
        people.count = atoi(str.substr(it+1, str.size() - it -1).c_str());
        //cout << "name: " << people.name << " count:" << people.count << endl;
    }
    std::pair<std::string, std::string> split_name(string& str) {
        auto it = str.find(",");
        std::pair<std::string, std::string> result;
        result.first = str.substr(1, it-1);
        result.second = str.substr(it+1, str.size() - it -1);
        result.second.pop_back();
        //cout << "first: " << result.first << " second:" << result.second << endl;
        return result;
    }
class UnionFind {
public: 
    void add(std::string& p) {
        auto ite = _father.find(p);
        if (ite == _father.end()) {
            _father[p] = p;
        }
    }
    void merge(std::string& p, std::string& q) {
        std::string p_father = get_father(p);
        std::string q_father = get_father(q);
        if (p_father != q_father) {
            _father[p_father] = q_father;
        }
    }
    std::string get_father(std::string& _p) {
        add(_p); //如果没有的节点,也要添加个节点
        std::string p = _p;
        while (_father[p] != p) {
            p = _father[p];
        }
        return p;
    }
    std::unordered_map<std::string, std::string> _father;
};
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/714374.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】241外卖微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…

@EqualsAndHashCode(callSuper = false和ture)的区别

EqualsAndHashCode&#xff08;callSuper false和ture&#xff09;的区别 区别 如果值是true&#xff0c;那么会比较父类的字段值&#xff0c;只有两个对象的父类字段也相同的时候&#xff0c;两个对象的比较结果才会是true&#xff1b;如果值是fasle&#xff0c;那么既便两个…

Weevil-Optimizer象鼻虫优化算法的matlab仿真实现

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 Weevil-Optimizer象鼻虫优化算法的matlab仿真实现&#xff0c;仿真输出算法的优化收敛曲线&#xff0c;对比不同的适应度函数。 2.测试软件版本以及运行结果展示…

SpringBoot实现的大文件上传

前言 大文件分片上传和断点续传是为了解决在网络传输过程中可能遇到的问题&#xff0c;以提高文件传输的效率和稳定性。 首先&#xff0c;大文件分片上传是将大文件分割成较小的片段进行上传。这样做的好处是可以减少单个文件的传输时间&#xff0c;因为较小的文件片段更容易快…

【秋招突围】2024届秋招笔试-小红书笔试题-第二套-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边…

高频小信号放大器的分类与质量指标

目录 分类 质量指标 增益 通频带 选择性 稳定性 噪声系数 分类 质量指标 增益 电压与功率的放大倍数。 通频带 放大效果比较好的频率范围。 选择性 放大目标信号以滤除其他信号的综合能力。 稳定性 噪声系数

chatglm4本地部署详解

下载地址 模型下载地址&#xff1a;GitHub - THUDM/GLM-4: GLM-4 series: Open Multilingual Multimodal Chat LMs | 开源多语言多模态对话模型 已经训练好的数据下载地址&#xff1a; https://huggingface.co/THUDM/glm-4-9b-chat-1m/tree/main 测试主机配置 cpu&#xff1a;E…

pdf转图片,pdf转图片在线转

pdf转图片的方法&#xff0c;对于许多人来说可能是一个稍显陌生的操作。然而&#xff0c;在日常生活和工作中&#xff0c;我们有时确实需要将pdf文件转换为图片格式&#xff0c;以便于在特定的场合或平台上进行分享、展示或编辑。以下&#xff0c;我们将详细介绍一个pdf转成图片…

【网络安全的神秘世界】AppScan安装及使用指南

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 https://www.hcl-software.com/appscan AppScan是一种综合型漏洞扫描工具&#xff0c;采用SaaS解决方案&#xff0c;它将所以测试功能整合到一个服务中&a…

Java基础——网络编程(一)

初识网络编程 网络编程&#xff1a;在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件…… BS架构的优缺点&#xff1a; 1、不需要开发客户端&#xff0c;只需要页面服务端 2、…

Redis 键空间迭代 Scan

引言 在平时线上Redis维护工作中&#xff0c;有时候需要从Redis实例成千上万的key中找出特定前缀的key列表来手动处理数据&#xff0c;可能是修改他的值&#xff0c;也可能是删除key。 Redis提供了一个简单暴力的指令keys用来列出所有满足特定正则字符串规则的key。 127.0.0…

26.1 WEB框架介绍

1. Web应用程序 1.1 应用程序有两种模式 应用程序的架构模式主要分为两种: C/S (客户端/服务器端)和B/S(浏览器/服务器端). * 1. C/S模式, 即客户端/服务器模式(Client/Server Model): 是一种分布式计算模式.它将应用程序的功能划分为客户端和服务器端两部分.在这种模式下, 客…

几种经典排序算法

几种经典排序算法 插入排序折半插入排序法 选择排序冒泡排序希尔排序堆排序二路归并排序快速排序 在介绍排序之前&#xff0c;先来说说&#xff0c;研究不同的排序主要是要研究他们的哪些不同&#xff1a; 时间性能。即排序过程中元素之间的比较次数与元素移动次数。我们此次讨…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 简而言之&#xff1a;就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

IPv6 ND 协议功能概述

ND 协议功能概述 ND&#xff08;Neighbor Discovery&#xff0c;邻居发现&#xff09;协议是 IPv6 的一个关键协议&#xff0c;它综合了 IPv4 中的 ARP&#xff0c;ICMP 路由发现和 ICMP 重定向等协议&#xff0c;并对它们做了改进。 作为 IPv6 的基础性协议&#xff0c;ND 协…

ppt添加圆角矩形,并调整圆角弧度方法

一、背景 我们看的论文&#xff0c;许多好看的图都是用PPT做的&#xff0c;下面介绍用ppt添加圆角矩形&#xff0c;并调整圆角弧度方法。 二、ppt添加圆角矩形&#xff0c;并调整圆角弧度 添加矩形&#xff1a; 在顶部工具栏中&#xff0c;点击“插入”选项卡。 在“插图”…

冒泡排序知识点

排序的基本概念 排序是计算机内经常进行的一种操作&#xff0c;其目的是将一组“无序”的记录调整为“有序”的记录序列。 常用的排序例子 8 7 1 5 4 2 6 3 9 把上面的这个无序序列变为有序&#xff08;升序或者降序&#xff09;序列的过程。 1 2 3 4 5 6 7 8 9&#xff0…

Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求

测试表现层的代码如何测试 加载测试的专用属性 首先写一个测试 假定我们进行测试的时候要加一些属性 要去修改一些属性 我们可以写一个只在本测试有效的测试 写在配置里 测试 打印输出 我们把配置文件里面的配置注释掉后 我们同样可以启动 package com.example.demo;impo…

代码随想录——组合总和Ⅱ(Leetcode 40)需要回顾

题目链接 回溯 本题的难点在于&#xff1a;集合&#xff08;数组candidates&#xff09;有重复元素&#xff0c;但还不能有重复的组合。 思想&#xff1a;元素在同一个组合内是可以重复的&#xff0c;怎么重复都没事&#xff0c;但两个组合不能相同。所以要去重的是同一树…