问题 B: 相同字符数目
时间限制: 1 Sec 内存限制: 128 MB提交: 255 解决: 64
[ 提交][ 状态][ 讨论版]
题目描述
问题很简单,给定仅由大小写字符和数字字符组成的字符串A和B,统计A和B中相同字符的数目,不考虑字符的次序。例如字符串“ABCAD” 与”dACBA”, 相同字符共有四个,分别是两个‘A’,一个‘B’和一个‘C'.
输入
第一行是一个整数T,表示有多少组数据。每组数据一行,每行包括由空格分开的两个字符串A和B,字符串长度不超过100.
输出
对于每组数据,输出一行,该行仅包括一个整数,即两个字符串的相同字符数目。
样例输入
2 ABCAD dACBA 12345 abde
样例输出
4 0
提示
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int a[102],b[102],c[102];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int a1[102],b1[102],c1[102];
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
memset(c1,0,sizeof(c1));
char A[102],B[102];
cin>>A>>B;
int lena=strlen(A);
int lenb=strlen(B);
int i;
for(i=0;i<lena;i++)
{
if(A[i]>='0'&&A[i]<='9')
c[A[i]-'0']++;
if(A[i]>='a'&&A[i]<='z')
a[A[i]-'a']++;
if(A[i]>='A'&&A[i]<='Z')
b[A[i]-'A']++;
}
for(i=0;i<lenb;i++)
{
if(B[i]>='0'&&B[i]<='9')
c1[B[i]-'0']++;
if(B[i]>='a'&&B[i]<='z')
a1[B[i]-'a']++;
if(B[i]>='A'&&B[i]<='Z')
b1[B[i]-'A']++;
}
int sum=0;
for(i=0;i<=9;i++)
sum+=(c[i]<c1[i]?c[i]:c1[i]);
for(i=0;i<='z'-'a';i++)
sum+=(a[i]<a1[i]?a[i]:a1[i]);
for(i=0;i<='Z'-'A';i++)
sum+=(b[i]<b1[i]?b[i]:b1[i]);
cout<<sum<<endl;
}
return 0;
}