1.使用哈希表分别记录两串的bead数量
2.需要使用迭代器进行遍历,避免出现重复情况:
如ppRYYGrrYBR2258和YrR8RrY,用YrR8RrY来遍历,则前面遍历了R,后面又遍历了R,导致统计的重复
AC代码:
//#include<string>
//#include <iomanip>
#include<vector>
#include <algorithm>
//#include<stack>
#include<set>
#include<queue>
#include<map>
//#include<unordered_set>
#include<unordered_map>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
using namespace std;
int main(void)
{
string give, favourite;
cin >> give >> favourite;
map<char, int> giveCount;
map<char, int> fCount;
for (int i = 0; i < give.size(); i++)
{
giveCount[give[i]]++;
}
for (int i = 0; i < favourite.size(); i++)
{
fCount[favourite[i]]++;
}
int more = 0;
int less = 0;
bool satify = true;
for (map<char, int>::iterator ite = fCount.begin(); ite != fCount.end();ite++)
{//需要使用迭代器进行遍历,避免出现重复情况
/*
如ppRYYGrrYBR2258和YrR8RrY,用YrR8RrY来遍历,则前面遍历了R,后面又遍历了R,导致统计的重复
*/
int bead = ite->first;
if (satify && fCount[bead] <= giveCount[bead])
more += giveCount[bead] - fCount[bead];
else
{
satify = false;
if (fCount[bead] > giveCount[bead])
less += fCount[bead] - giveCount[bead];
}
}
if (satify)
{
cout << "Yes " << give.size() - favourite.size() << endl;
}
else
cout << "No " << less << endl;
return 0;
}