--- title: "电话号码" created: 2025-11-28 tags: - 算法 --- # 电话号码 ## 题目 [电话号码](https://www.acwing.com/problem/content/description/4211/) ![[image-42d216c6.png]] ## 思路分析 数据范围很小 纯模拟 重点是选取数据结构 首先哈希每个名字 名字后有他名下所有的电话号码 存在vector里 所以数据结构确定用 unordered\_map>存 然后对于电话号码要处理后缀相同问题 后缀不好做 就翻转一下变成问前缀问题 前缀可以多种写了 这里因为很小 直接用find 首先还是借用一个特性 字符串排序后 如果存在直接前缀关系的两个串一定是临近的 且父串在后 所以只需要排序 用i+1find一下i看存不存在即可 ## 代码实现 ```cpp #include using namespace std; unordered_map> h; int n; int main() { cin>>n; while(n--){ string name; int cnt; cin>>name>>cnt; while(cnt--){ string number; cin>>number; reverse(number.begin(),number.end());//后缀不好判断 改为前缀 h[name].push_back(number); } } cout< res; for(int i=0;i