一百道编程题| 12 Cities and States

目录

一、思路

二、求解

三、注意的点

四、知识点


一、思路

1.数据存储与处理

       通过 unordered_map<string, int> 类型的 mp 来存储城市信息和统计相关数量。在读取每个城市名称和所在州代码后,取城市名称的前两个字母作为关键信息,若该关键信息与所在州代码相同则跳过,因为不符合特殊城市对的条件,特殊城市对要求来自不同州。

2.判断特殊城市对

       利用 mp 来判断是否存在特殊城市对。对于每一组读取到的城市信息,将州代码和城市名称前两个字母组合成一个字符串,如 sta + cit,查询 mp 中该字符串对应的数量,将其累加到 ret 中,这一步是统计之前已经出现过的符合特殊城市对关系的数量。然后将本次的城市记录,名称前两个字母和州代码组合成另一个字符串,如 cit + sta,以便后续判断是否能构成特殊城市对。

二、求解

三、注意的点

1.字符串组合顺序

       在 mp 中存储和查询时,要注意字符串组合的顺序。sta + cit 和 cit + sta 是不同的字符串,代表不同的城市 - 州关系组合,不能混淆。

2.特殊情况处理

        处理了城市名称前两个字母和所在州代码相同的情况,通过 if (cit == sta) continue; 跳过。

四、知识点

1.unordered_map 的使用

        unordered_map 是 C++ 标准库中的关联容器,基于哈希表实现,具有平均 O(1) 的插入、查找和删除操作时间复杂度。在本题中用于快速存储和查询城市 - 州关系组合的数量,以判断是否构成特殊城市对。

2.字符串操作

        使用了 substr 方法来截取城市名称的前两个字母,同时对字符串进行拼接,如 sta + cit 和 cit + sta,这是处理字符串相关问题的常见操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值