PAT A1092 To Buy or Not to Buy(同B1039)
Sample Input 1:
ppRYYGrrYBR2258
YrR8RrY
Sample Output 1:
Yes 8
Sample Input 2:
ppRYYGrrYB225
YrR8RrY
Sample Output 2:
No 2
-
思路 1:
遍历buy,在sold中find是否存在,存在就删除sold中对应字符,不存在cnt++,根据cnt的值输出结果 -
code 1:
#include <iostream>
#include <string>
using namespace std;
int main(){
string sold, buy;
cin >> sold >> buy;
int cnt = 0;
for(int i = 0; i < buy.size(); ++i){
if(sold.find(buy[i]) != string::npos){
//找到了,在sold中earse这个元素
sold.erase(sold.find(buy[i]), 1);
}else{
//没找到,统计缺几个
cnt++;
}
}
if(cnt == 0) cout << "Yes " << sold.size();
else cout << "No " << cnt;
return 0;
}
-
思路2:散列
-
T2 code:
#include <bits/stdc++.h>
using namespace std;
int has[256];
int main(){
string shop, eva;
cin >> shop >> eva;
for(int i = 0; i < shop.size(); ++i){
has[shop[i]]++;
}
int miss = eva.size();
for(int i = 0; i < eva.size(); ++i){
if(has[eva[i]] > 0){
miss--;
has[eva[i]]--;
}
}
if(miss == 0) printf("Yes %d", shop.size()-eva.size());
else printf("No %d", miss);
return 0;
}
- T3 code:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 300;
int has[maxn];
int main()
{
string shop, eva;
cin >> shop >> eva;
for(int i = 0; i < shop.size(); ++i)
{
has[shop[i]-'0']++;
}
int cnt = 0;
for(int i = 0; i < eva.size(); ++i)
{
if(has[eva[i]-'0'] == 0)
{
cnt++;
}else
{
has[eva[i]-'0']--;
}
}
if(cnt == 0) printf("Yes %d", shop.size()-eva.size());
else printf("No %d", cnt);
return 0;
}
- T4 code:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 256;
int has[maxn];
int main()
{
string shop, owner;
cin >> shop >> owner;
for(int i : shop) has[i]++;
int cnt = 0;
for(int i : owner)
{
if(has[i] == 0)
{
cnt++;
}else
{
has[i]--;
}
}
if(cnt > 0) printf("No %d", cnt);
else printf("Yes %d", shop.size() - owner.size());
return 0;
}