题目链接:请点击
思路:写这道题之时因为刚做完上一道题1038,当时因为时间限制的原因最后是用下标表示成绩的方法做的,因此这道题先看时间限制100ms比上一道250ms更要求时间。所以,首先就想到要用下标来表示小写字母、大写字母和数字。具体就是将给定的两个字符串(一个摊主的珠串一个小红的珠串)所包含的字符分别转化到整型数组里面并统计其字符个数,且整型数组下标从0~25分表代表小写英文字母a~z,26~51分表代表大写英文字母A~Z,52~62分表代表数字0~9 。
AC代码:
#include<iostream>
#include<cctype>
#include<string>
using namespace std;
int n1[62]={0},n2[62]={0};
int main()
{//n1与n2的数组下标从0~25分表代表小写英文字母a~z,26~51分表代表大写英文字母A~Z,52~62分表代表数字0~9
string str1,str2;
getline(cin,str1);
getline(cin,str2);
for(int i=0;i<str1.length();i++)
{
if(islower(str1[i]))
n1[str1[i]-'a']++;
else if(isupper(str1[i]))
n1[str1[i]-'A'+26]++;
else
n1[str1[i]-'0'+52]++;
}
for(int i=0;i<str2.length();i++)
{
if(islower(str2[i]))
n2[str2[i]-'a']++;
else if(isupper(str2[i]))
n2[str2[i]-'A'+26]++;
else n2[str2[i]-'0'+52]++;
}
int count1=0,flag=0,count2=0;
for(int i=0;i<62;i++)
{
if(n1[i]>=n2[i])
count1=n1[i]-n2[i]+count1;
else{
flag=1;
count2=n2[i]-n1[i]+count2;
}
}
if(flag)
cout<<"No "<<count2;
else cout<<"Yes "<<count1;
return 0;
}