#include<iostream>
#include<string>
#include<map>
#include<ctype.h>
using namespace std;
int main()
{
map<char, char>phonenumber{ {'a','2'},{'b','2'},{'c','2'} ,{'d','3'},{'e','3'},{'f','3'},{'g','4'},{'h','4'},
{'i','4'},{'j','5'},{'k','5'} ,{'l','5'} ,{'m','6'} ,{'n','6'} ,{'o','6'} ,{'p','7'} ,{'r','7'} ,{'s','7'} ,
{'t','8'} ,{'u','8'} ,{'v','8'} ,{'w','9'} ,{'x','9'} ,{'y','9'} };
map<string, int> ansMap;
int n; bool flag = 1;
cin >> n;
while (n--)
{
string given, trans;
cin >> given;
for (auto i : given) if (i >= '0' && i <= '9') trans += i;
else if (i >= 'a' && i <= 'z') trans += phonenumber[i];
else if (i >= 'A' && i <= 'Z') trans += phonenumber[tolower(i)];
trans.insert(trans.begin()+3, '-');
if (ansMap.empty() || ansMap.find(trans) == ansMap.end()) ansMap.insert({ trans,1 });
else ansMap[trans]++;
}
for (auto i : ansMap) { if (i.second > 1) { if (!flag) cout << endl; cout << i.first << " " << i.second; flag = 0; } }
if (flag) cout << "No duplicates.";
return 0;
}
本题用一个Map对应字母与电话号码
再用一个Map记录所有号码,其自动实现排序后直接判断输出即可