问题描述
找出我们要买的珠子在给定字符串中出现的个数,如果没有达到我们需要的珠子个数,就输出No,并输出少几个。如果能满足这个数目,则输出Yes,并输出多余几个。
题目分析
根据第一段输入的字符串,创建一个很大的数组,按照这个字符的ASCII码值作为索引,将这个位置的值+1,记录第一段输入的字符串中每个字符的出现次数。
然后我们输入第二个字符串。遍历第二个字符串,如果这个字符在第一行字符串中出现的次数大不等于0,我们就将count+1,然后将其在第一个字符串中的次数-1,因为我们已经在这个位置占用了一次了。最后,如果count==我们要买的珠子数目,输出yes,并且用第一行字符串的长度-count得到多余。反之输出No,然后用我们要买的珠子数目-count。
代码
#include <iostream>
using namespace std;
int main()
{
int arr[100010] = {0};
string goods,wants;
cin>>goods;
cin>>wants;
for(int i = 0;i < goods.length();i++)
{
arr[goods[i] - '0']++;
}
int count = 0;
for(int i = 0;i < wants.length();i++)
{
if(arr[wants[i] - '0'] != 0)
{
count++;
arr[wants[i] - '0']--;
}
}
if(count == wants.length())
cout<<"Yes"<<" "<<goods.length() - count;
else
cout<<"No"<<" "<<wants.length() - count;
return 0;
}
答题用时8min
Q39——finish√