题目来源

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

图 1

输入格式:

每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。

输出格式:

如果可以买,则在一行中输出 Yes 以及有多少多余的珠子;如果不可以买,则在一行中输出 No 以及缺了多少珠子。其间以 1 个空格分隔。

输入样例 1:

  1. ppRYYGrrYBR2258
  2. YrR8RrY

输出样例 1:

  1. Yes 8

输入样例 2:

  1. ppRYYGrrYB225
  2. YrR8RrY

输出样例 2:

  1. No 2

分析:

思路1

颜色总共有0-9,a-z,A-Z种,用了两个数组来保存摊主的珠串,以及小红需要的珠串(数组长度为123,因为z的ASCII码最大,为122)

输入的字符串,将字符的出现次数保存到sell和need数组。同时用bool exist数组(初始化false)表示小红需要的珠串(设为true)

用sell的每一位减去need的每一位,如果不是小红需要的,就是多余的;如果是小红需要的,且sell[I]-need[i]<0,说明缺了

思路2

将摊主的珠串和小红需要的珠串进行比较,相同的字符统一设为@或者#或者%等符号都ok

接着分别遍历两个字符串,摊主中如果有的字符不是我们设置的符号,就说明有多余

小红需求中如果有的字符不是我们设置的符号,就说明有缺少

思路3

用一个hashmap保存摊主的字符串,记录不同颜色珠子数量

遍历小红的珠串,同时hashmap中对应的颜色数量-1,如果数量小于0,就说明缺少这一颗珠子

如果都没有小于0,可以输出Yes

C++实现:

思路1

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int sellArr[] = { };
  6. int needArr[] = { };
  7. bool exist[] = { false };
  8. int main()
  9. {
  10. string sell;
  11. string need;
  12. int less = ;
  13. int more = ;
  14. int index = ;
  15. cin >> sell >> need;
  16.  
  17. if (sell == need){
  18. printf("Yes 0");
  19. return ;
  20. }
  21.  
  22. for (int i = ; i < sell.length(); ++i){
  23. index = (int)(sell[i]);
  24. sellArr[index]++;
  25. }
  26.  
  27. for (int i = ; i < need.length(); ++i){
  28. index = (int)(need[i]);
  29. needArr[index]++;
  30. exist[index] = true;
  31. }
  32.  
  33. for (int i = /*0的ASCII*/; i < ; ++i){
  34. int temp = sellArr[i] - needArr[i];
  35. if (exist[i] != true){
  36. more = more + temp;
  37. }
  38. else if (exist[i] == true){
  39. if (temp < ){
  40. less = less - temp;
  41. }
  42. }
  43. }
  44. if (less == ){
  45. printf("Yes %d", more + );
  46. }
  47. else{
  48. printf("No %d", less);
  49. }
  50. return ;
  51. }

思路2

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string sell;
  7. string need;
  8. int less = ;
  9. int more = ;
  10.  
  11. cin >> sell >> need;
  12. for(int i = ; i < sell.size(); ++i)
  13. {
  14. for(int j = ; j < need.size(); ++j)
  15. {
  16. //为什么不是sell[j]?
  17. //有可能 need.size() > sell.size();
  18. //sell[j] 会越界
  19. if(need[j] == sell[i])
  20. {
  21. need[j] = '@';
  22. sell[i] = '@';
  23. }
  24. }
  25. }
  26.  
  27. for (int i = ; i < sell.size(); ++i)
  28. {
  29. if (sell[i] != '@')
  30. {
  31. more++;
  32. }
  33. }
  34. for (int i = ; i < need.size(); ++i)
  35. {
  36. if (need[i] != '@')
  37. {
  38. less++;
  39. }
  40. }
  41. if (less != )
  42. {
  43. cout << "No " << less;
  44. }
  45. else
  46. {
  47. cout << "Yes " << more;
  48. }
  49. return ;
  50. }

思路3

  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4. using namespace std;
  5. int main() {
  6. string sell, need;
  7. cin >> sell >> need;
  8. bool flag = true; // 是否缺少
  9. unordered_map<char, int> sellMap;
  10. int less = ; // 缺少的珠子数量
  11.  
  12. for (int i = ; i < sell.size(); ++i) {
  13. sellMap[sell[i]]++;
  14. }
  15.  
  16. for (int i = ; i < need.size(); ++i) {
  17. sellMap[need[i]]--;
  18. if (sellMap[need[i]] < ) {
  19. flag = false;
  20. less++;
  21. }
  22. }
  23. if (flag) {
  24. cout << "Yes " << sell.size() - need.size(); // 多出来的珠子
  25. }
  26. else {
  27. cout << "No " << less;
  28. }
  29. return ;
  30. }

Java实现:

PAT 乙级 1039.到底买不买 C++/Java的更多相关文章

  1. PAT(B) 1039 到底买不买(Java)字符串

    题目链接:1039 到底买不买 (20 point(s)) 题目描述 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串 ...

  2. PAT乙级1039

    题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328 题解 用两个字符串表示两个箱子,一 ...

  3. PAT Basic 1039 到底买不买 (20 分)

    小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子 ...

  4. PAT 乙级 1003.我要通过! C++/Java

    1003 我要通过! (20 分) 题目来源 “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则 ...

  5. PAT 乙级 1036.跟奥巴马一起编程 C++/Java

    题目来源 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏 ...

  6. PAT 乙级 1038.统计同成绩学生 C++/Java

    题目来源 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空 ...

  7. PAT 乙级 1002.写出这个数 C++/Java

    1002 写出这个数 (20 分) 题目来源 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n ...

  8. PAT 乙级 1005.继续(3n+1)猜想 C++/Java

    1005 继续(3n+1)猜想 (25 分) 题目来源  卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记 ...

  9. PAT 乙级 1011.A+B 和 C C++/Java

    题目来源 给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行, ...

随机推荐

  1. 其它 dev是什么意思

    原文:https://blog.csdn.net/zsl131557/article/details/80886114 原文:https://blog.csdn.net/LYmahang123/art ...

  2. koa2+mysql+vue实现用户注册、登录、token验证

    说明: node.js提供接口,vue展现页面,前后端分离,出于编辑器功能和编辑习惯,vue用HbuilderX,node.js用VScode.(PS:仅作为学习笔记,如有不当之处欢迎指出,在此先谢为 ...

  3. Linux性能优化实战学习笔记:第三十六讲

    一.上节总结回顾 上一节,我们回顾了经典的 C10K 和 C1000K 问题.简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 ...

  4. [LeetCode] 290. Word Pattern 词语模式

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  5. Django性能优化的几种方法

    1.一次性取出你所需要的数据 单一动作,需要多次连接数据库里的时候,最好一次性取出所有需要的数据,减少连接数据库的次数.此类需求推荐使用QuerySet.select_related()和prefet ...

  6. Codeforces 1204D Kirk and a Binary String - 数学

    题目传送门 传送门 群除我均会猜结论/找规律,sad.... 以下内容只保证代码能过system test,证明应该都是在纯口胡 约定下文中的$LIS$表示最长不下降子序列. 定义$zero(s)$表 ...

  7. 前后台$.post交互并返回JSON对象

    1.前台代码: $.post(url,{"blogId":blogId},function(reData){ if(reData.state=="success" ...

  8. 【2019年08月06日】A股最便宜的股票

    查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 便宜指数 = PE + PB + 股息 + ROE,四因子等权,数值越大代表越低估. 本策略只是根据最新的数据来选 ...

  9. vue学习面向对象,在项目中怎么用呢?

    面向对象感觉很牛逼,可是在项目中怎么用呢? 我至今见到的用法,写了一个用户对象. 效果:只要执行了new User(userInfo)就会在cookie,localStorage存放数据. 所以最简单 ...

  10. python 做词云图

    #导入需要模块 import jieba import numpy as np import matplotlib.pyplot as plt from PIL import Image from w ...