最后写的判断相等的函数记得所有数据相等的情况,所以记得让i=slen,多判断一位
#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<map>
#include<set>
#include<cmath>
#include<cstring>
#include<cctype>
#include<climits>
#include<memory>
using namespace std;
#define LL long long
#define INT (1<<31)-1;
const int N=5000;
int a[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1};
string ss[100010];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int slen=0;
while(n--)
{
string s;
string temp;
cin>>s;
if(s.find('Q',0)!=string::npos||s.find('Z',0)!=string::npos)
continue;
int len=0;
for(int i=0;i<s.length();i++)
{
if(isalpha(s[i]))
s[i]=a[s[i]-'A']+'0';
if(isdigit(s[i]))
{
temp+=s[i];
len++;
}
if(len==3)
{
temp+='-';
len++;
}
}
// cout<<temp<<endl;
ss[slen++]=temp;
}
sort(ss,ss+slen);
int sum=1;
int flag=0;
for(int i=1;i<=slen;i++)
{
if(ss[i]==ss[i-1])
{
sum++;
}
if(i==slen||ss[i]!=ss[i-1])
{
if(sum>1)
{
flag=1;
cout<<ss[i-1]<<' '<<sum<<endl;
}
sum=1;
}
}
if(!flag) cout<<"No duplicates."<<endl;
if(t)
cout<<endl;
}
return 0;
}