PAT Advanced 1092 To Buy or Not to Buy (20) [Hash散列]
题目
Eva would like to make a string of beads with her favorite colors so she went to a small shop to buy some beads. There were many colorful strings of beads. However the owner of the shop would only sell the strings in whole pieces. Hence Eva must check whether a string in the shop contains all the beads she needs. She now comes to you for help: if the answer is “Yes”, please tell her the number of extra beads she has to buy; or if the answer is “No”, please tell her the number of beads missing from the string.
Input Specification:
Each input file contains one test case. Each case gives in two lines the strings of no more than 1000 beads which belong to the shop owner and Eva, respectively.
Output Specification:
For each test case, print your answer in one line. If the answer is “Yes”, then also output the number of
extra beads Eva has to buy; or if the answer is “No”, then also output the number of beads missing from
the string. There must be exactly 1 space between the answer and the number.
Sample Input 1:
ppRYYGrrYBR2258
YrR8RrY
Sample Output 1:
Yes 8
Sample Input 2:
ppRYYGrrYB225
YrR8RrY
Sample Output 2:
No 2
题目分析
字符串a,b
- b中字符出现次数<=其在a中出现次数,输出Yes a中多余字符出现次数
- b中字符出现次数>其在a中出现次数,输出No a中缺少字符数
解题思路
算法1
- 统计a中字符出现的次数,记录在asc数组中
- 使用df记录缺少字符数
- 遍历b中字符,当前字符为b[i]
- 若asc[b[i]]大于0,减一
- 若asc[b[i]]等于0,df++(缺少数+1)
- 判断df值,并打印
- 若df==0,表明不缺少字符,输出a中多余字符--a的长度-b的长度
- 若df!=0,表明缺少字符,输出df
算法2
- 统计a,b中字符出现次数,记录在容器asc1,asc2中
- 使用df记录缺少字符数
- 遍历b
- 若asc1[b[i]]<asc2[b[i]],df++(缺少数+1);
- 若asc2[b[i]]>=asc2[b[i]],不缺少,跳过
- 判断df值,并打印
- 若df==0,表明不缺少字符,输出a中多余字符--a的长度-b的长度
- 若df!=0,表明缺少字符,输出df
Code
Code 01(算法1、最优)
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char * argv[]){
string a,b;
cin>>a>>b;
int asc[256]={0};
for(int i=0;i<a.length();i++){
asc[a[i]]++;
}
int df=0;
for(int i=0;i<b.length();i++){
if(asc[b[i]]>0)asc[b[i]]--;
else df++;
}
if(df==0)printf("Yes %d",a.length()-b.length());
if(df!=0)printf("No %d",df);
return 0;
}
Code 02(算法2、int array)
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[]) {
char s1[1001];
char s2[1001];
cin.getline(s1,1001);
cin.getline(s2,1001);
int len1=strlen(s1),len2=strlen(s2);
int asc1[256]= {0};
int asc2[256]= {0};
for(int i=0; i<len1; i++) asc1[s1[i]]++;
for(int i=0; i<len2; i++) asc2[s2[i]]++;
int df=0;
int ascp[256]= {0};
for(int i=0; i<len2; i++) {
if(ascp[s2[i]]==0&&asc2[s2[i]]>asc1[s2[i]]) {
df+=asc2[s2[i]]-asc1[s2[i]];
ascp[s2[i]]=1;
}
}
if(df==0)printf("Yes %d",len1-len2);
if(df!=0)printf("No %d",df);
return 0;
}
Code 03(算法2、map)
#include <iostream>
#include <cstring>
#include <unordered_map>
using namespace std;
int main(int argc, char * argv[]) {
char s1[1001];
char s2[1001];
cin.getline(s1,1001);
cin.getline(s2,1001);
int len1=strlen(s1),len2=strlen(s2);
unordered_map<char,int> m1,m2;
for(int i=0; i<len1; i++) m1[s1[i]]++;
for(int i=0; i<len2; i++) m2[s2[i]]++;
int df=0;
int ascp[256]= {0};
for(int i=0; i<len2; i++) {
if(ascp[s2[i]]==0&&m2[s2[i]]>m1[s2[i]]) {
df+=m2[s2[i]]-m1[s2[i]];
ascp[s2[i]]=1;
}
}
if(df==0)printf("Yes %d",len1-len2);
if(df!=0)printf("No %d",df);
return 0;
}
PAT Advanced 1092 To Buy or Not to Buy (20) [Hash散列]的更多相关文章
- PAT Advanced 1084 Broken Keyboard (20) [Hash散列]
题目 On a broken keyboard, some of the keys are worn out. So when you type some sentences, the charact ...
- PAT Advanced 1050 String Subtraction (20) [Hash散列]
题目 Given two strings S1 and S2, S = S1 – S2 is defined to be the remaining string afer taking all th ...
- PAT Advanced 1041 Be Unique (20) [Hash散列]
题目 Being unique is so important to people on Mars that even their lottery is designed in a unique wa ...
- PAT A1145 Hashing - Average Search Time (25 分)——hash 散列的平方探查法
The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...
- PAT Basic 1047 编程团体赛(20) [Hash散列]
题目 编程团体赛的规则为:每个参赛队由若⼲队员组成:所有队员独⽴⽐赛:参赛队的成绩为所有队员的成绩和:成绩最⾼的队获胜.现给定所有队员的⽐赛成绩,请你编写程序找出冠军队. 输⼊格式: 输⼊第⼀⾏给出⼀ ...
- PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642
PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...
- PAT (Advanced Level) 1069. The Black Hole of Numbers (20)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT (Advanced Level) 1065. A+B and C (64bit) (20)
因为会溢出,因此判断条件需要转化.变成b>c-a #include<cstdio> #include<cstring> #include<cmath> #in ...
随机推荐
- 实验吧-web-天下武功唯快不破(Python中byte和str的转换)
题目:看看响应头 打开网站,既然已经提示我们看响应头了,那我们就看看呗(习惯bp,也可直接F12查看) 可以看到,响应头部分有个FLAG,而且有提示:please post what you find ...
- Node.js 文件系统模块
章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...
- Linux基础命令-02
Linux基础命令-02:
- 每天一点点之vue框架开发 - 如何在一个页面调用另一个同级页面的方法
使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: api传送门 在项目中实现: 1.首先同一个vue实例来调 ...
- 【Vue中的坑】Vue中的修改变量没有效果?
使用箭头函数 this.$forceUpdate();
- Vue中 几个常用的命名规范
1,组件名 官方推荐的组件名是 每个单词首字母大写(PascalCase) 或者 全小写用 - 连接(kebab-case) . 在DOM中使用的时候, 改为全小写, 单词之间用 - 连接. Vue. ...
- 【LeetCode】跳跃游戏II
[问题]给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以跳跃的最大长度.你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [,,,,] 输出: ...
- errors exist in required project(s) xxx proceed with launch?
原因:本地更新文件和SVN有冲突..找到报错的文件.和SVN资源库的文件对比,修改即可. 一定要解决所有的冲突啊.更新的时候一定要注意有冲突的文件.不然项目无法启动. ---------------- ...
- QF中间件
QF中间件使用说明 QF中间件是在2020年春节期间出现新型冠状病毒感染的肺炎疫情不敢外出,闲来无事编写的.编程是业余爱好,平时编程只会拖控件,中间件可能存在未知Bug,这个版本也只 ...
- python从命令窗口启动脚本 创建并写入内容到文件示例
写入到文件示例: #!/usr/bin/env python3 from math import exp, log, sqrt import re from datetime import date, ...