whole pieces整件
题目大意:第一个字符串代表全部的面包
第二个是这个人人想买的面包,检查商店出售是否包含这个人全部
想要的
包含 yes 并且说明多买几个
不包含 no 说明错过几个
0-9 a-z A-Z代表颜色
注意条件:
1.人买的可能比商店卖的多
2.面包数量也要对上
3.利用负数代表差几个面包的时候,需要注意只有第一个字母有效
比如A hash值为-1,那么接下来的A的hash值不应该继续使用
题目思路:
1.首先将面包录入hash中 ,hashtable为ascii
2.商店卖的++,然后人买的–,若是都有,则最后人买的对于的hash值都是0,最后输出input.length-input_length
若有些卖完了,或者,没有,对应的hash值是负数
3.若hash值》0 代表足够继续检查下一个
若hash值<0 负几代表缺几个 并且应该把值置为0,代表后面碰到相同的字母不在累计
#include <iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include<string>
//1092 To Buy or Not to Buy
/*
whole pieces整件
题目大意:第一个字符串代表全部的面包
第二个是这个人人想买的面包,检查商店出售是否包含这个人全部
想要的
包含 yes 并且说明多买几个
不包含 no 说明错过几个
0-9 a-z A-Z代表颜色
注意条件:
1.人买的可能比商店卖的多
2.面包数量也要对上
题目思路:
1.首先将面包录入hash中 ,hashtable为ascii
2.商店卖的++,然后人买的--,若是都有,则最后人买的对于的hash值都是0,最后输出input.length-input_length
若有些卖完了,或者,没有,对应的hash值是负数
3.若hash值》0 代表足够继续检查下一个
若hash值<0 负几代表缺几个 并且应该把值置为0,代表后面碰到相同的字母不在累计
a97 A65
*/
using namespace std;
int main() {
string input;
string input_;
int hash[130]={0};
getline(cin,input);
getline(cin,input_);
int i=0,j=0;
while(i<input.length()||j<input_.length())
{
if(i<input.length())
{
hash[input[i]]++;
i++;
}
if(j<input_.length())
{
hash[input_[j]]--;
j++;
}
}
int sum=0;
bool flag=true; //代表可以买到
for( int i=0;i<input_.length();i++)
{
if(hash[input_[i]]>=0)
{
continue;
}
else if(hash[input_[i]]<0)
{
sum=sum-hash[input_[i]];
hash[input_[i]]=0;
flag=false;
}
}
if(flag)
printf("Yes %d",input.length()-input_.length());
else
{
printf("No %d",sum);
}
system("pause");
}```