// B1039 到底买不买 (20分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
编程思想:
1、读入第一串,统计珠子数
2、读入第二串,个数-1,如果小于0则佳佳
3、miss是否大于0,大于0则两串相减,小于0则输出miss
里面有重复的,
输入进来,hash,判断是否hash1[i]是否大于等于小红hash2[i]想要的,是则判断下一珠子,以小红的为for循环
弄一个flag表示是否可以做,可以则直接两个长度相减
不可以,则要统计每一个,小于,小多少
learn && wrong;
1、hash是可以直接用字符做下标的,记住
2、错在函数上,这个函数手法要会
3、我明白为什么会是3了,因为他是每个字符单独比较的,比如RR就是两次,但是只要统计一次就可以了,-》所以太麻烦了,只要读进来,hash减减就行了,小于0就+1
*/
include <iostream>
include <cstring>
using namespace std;
int hash1[62] = { 0 }; //拥有的珠子的数量
char str1[1010],str2[1010];
int change(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'a' && c <= 'z') return c - 'a' + 10;
if (c >= 'A' && c <= 'Z') return c - 'A' + 36;
}
int main()
{
cin >> str1;
int len1 = strlen(str1);
for (int i = 0;i < len1;++i) { //有多少珠子数
int id = change(str1[i]);
++hash1[id];
}
cin >> str2;
int len2 = strlen(str2);
int miss = 0;
for (int i = 0;i < len2;++i) { //统计小红想要的珠子数
int id = change(str2[i]);
--hash1[id];
if (hash1[id] < 0) ++miss;
}
if (miss > 0) cout << "No " << miss << endl;
else cout << "Yes " << len1 - len2;
}
网友评论