1039 到底买不买 (20分)

原题链接:传送门

一、题目:

输入样例 1:

ppRYYGrrYBR2258

YrR8RrY

输出样例 1:

Yes 8

输入样例 2:

ppRYYGrrYB225

YrR8RrY

输出样例 2:

No 2

二、解析:

思路1:巧妙开大数组减少代码量

将数组开大一点,把所有字符出现的次数放入数组中。循环判断出A和B字符串中所有出现字符的次数。用数组存放出现过的字符的次数,字符的ASCII码为下标。再判断是否小摊是否足够。

这样比思路2方法少写一些代码。

AC代码1(简单):

import java.util.Scanner;

/**

* 1039 到底买不买 (20分)

*

* @思路:循环判断出A和B字符串中所有出现字符的次数。用数组存放出现过的字符的次数,字符的ASCII码为下标。再判断是否小摊是否足够。

* @author: ChangSheng

* @date: 2019年12月30日 下午10:32:28

*/

public class Main {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int[] arrA = new int[96+26+1]; // 字符的ASCII码为下标。数组大小应该是96+26+1。因为z是122,而大小为122(96+26)的数组下标最大是121。所以需要+1

int[] arrB = new int[96+26+1];

char[] A = s.next().toCharArray();

char[] B = s.next().toCharArray();

for (int i = 0; i < A.length; i++) {

arrA[A[i]]++; // 出现过的字符加一

}

for (int i = 0; i < B.length; i++) {

arrB[B[i]]++;

}

boolean isEnough = true; // 假设A字符中出现的个数是充足的

int count = 0;

for (int i = 0; i < arrA.length; i++) {

if (arrA[i] < arrB[i]) { // 数量不足

isEnough = false;

count += arrB[i] - arrA[i];

}

}

if (isEnough) System.out.print("Yes "+(A.length - B.length));

else System.out.print("No "+count);

}

}

思路2:

创建一个10+26*2的数组,下标0-9表示的是0-9,10-25是A-Z,26-61是a-z。循环判断出A和B字符串中所有字符出现的次数,用数组存放出现过的字符的次数。再循环判断是否B是否足够。

AC代码2: 数组开的小一点,但是代码相对AC代码1要多一些

import java.util.Scanner;

/**

* 1039 到底买不买 (20分)

*

* @思路:循环判断出A和B字符串中所有出现字符的次数,用数组存放出现过的字符的次数。再判断是否小摊是否足够。

* @author: ChangSheng

* @date: 2019年12月30日 下午10:32:28

*/

public class Main {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

int[] arrA = new int[10+26*2]; // 下标0-9表示的是0-9,10-25是A-Z,26-61是a-z

int[] arrB = new int[10+26*2];

char[] A = s.next().toCharArray();

char[] B = s.next().toCharArray();

for (int i = 0; i < A.length; i++) {

if (A[i] >= '0' && A[i] <= '9') {

int index = A[i] - 48;

arrA[index]++;

} else if (A[i] >= 'A' && A[i] <= 'Z') {

int index = A[i] - 65 + 10;

arrA[index]++;

} else if (A[i] >= 'a' && A[i] <= 'z') {

int index = A[i] - 97 + 10 + 26;

arrA[index]++;

}

}

for (int i = 0; i < B.length; i++) {

if (B[i] >= '0' && B[i] <= '9') {

int index = B[i] - 48;

arrB[index]++;

} else if (B[i] >= 'A' && B[i] <= 'Z') {

int index = B[i] - 65 + 10;

arrB[index]++;

} else if (B[i] >= 'a' && B[i] <= 'z') {

int index = B[i] - 97 + 10 + 26;

arrB[index]++;

}

}

boolean isEnough = true; // 假设A字符中出现的个数是充足的

int count = 0;

for (int i = 0; i < arrA.length; i++) {

if (arrA[i] < arrB[i]) { // 数量不足

isEnough = false;

count += arrB[i] - arrA[i];

}

}

if (isEnough) System.out.print("Yes "+(A.length - B.length));

else System.out.print("No "+count);

}

}

点赞

1

收藏

分享

文章举报

长生的梦呓

发布了83 篇原创文章 · 获赞 94 · 访问量 5397

私信

关注

pat题解java,1039 到底买不买 (20分) Java题解 PAT (Basic Level) Practice (中文)- 巧妙开大数组减少代码量...相关推荐

  1. 【PAT甲级 火星数字】1100 Mars Numbers (20 分)Java 全部AC

    题目 提交Java的时候,千万不要写第一行的包名称!!被这个bug折腾了一个小时.. 题解1:Java import java.util.ArrayList; import java.util.Lis ...

  2. 【PAT甲级 环最短距离】1046 Shortest Distance (20 分) Java、C++

    题目 这题是给你一个环,让你计算两点之间最短距离. 环的任意两点就两条路,只要算出环长和任意一条路的大小,另一条就出来了 时间复杂度O(N) 提前计算前缀长度和即可 题解 C++ 全部测试点通过 #i ...

  3. 【PAT甲级 替换指定字符】1035 Password (20 分) Java版 4/4通过

    题目 这个题挺简单,意思就是把所有的1替换成@,0替换成%等等 读题要仔细,输出格式方面有几个小坑: 末尾不要有多余的空格.换行 如果替换了,要在第一行输出替换的条数 如果没替换,要把题目给的字符串拼 ...

  4. 【PAT甲级 BigInteger】1019 General Palindromic Number (20 分) Java版 7/7通过

    题目 一开始只使用了Long,有后面四个测试点过不去,后来换了BigInteger,就通过了. 这题用Java的BigInteger做,可以操作任意长度的数字,感觉有一点取巧了. 如果C或者C++的话 ...

  5. PTA平台 · PAT(Basic Level) Practice(中文) 题目集

    前  言 ※  PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习. ※  PAT是 浙江大学计算机程序设计能力考试(Programming Ability Test),分为乙级( ...

  6. 【题解】PAT (Basic Level) Practice (中文)

    互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...

  7. 【PAT甲级题解记录】1148 Werewolf - Simple Version (20 分)

    [PAT甲级题解记录]1148 Werewolf - Simple Version (20 分) 前言 Problem:1148 Werewolf - Simple Version (20 分) Ta ...

  8. PAT (Basic Level) Practice (中文)答案合集

    准备复试专用,目标刷完全部中文题! 1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ...

  9. 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)

    可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决) c1, c2 = map(int,input().split( ...

最新文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
  2. BZOJ 3262 cdq分治 OR 树套树
  3. jdbc对mysql进行增删改查操作(Statement)
  4. 命令行编译c#源程序
  5. Dubbo作者亲述:那些辉煌、沉寂与重生的故事 1
  6. kali linux set工具,求助: 社会工程学工具set 出现错误for kali linux.
  7. iis 在站点中新建虚拟目录站点之后,虚拟目录中的 web.config 与 主站点中的 web.config冲突解决方案...
  8. 资源 | 没有数学和编程基础,这几个数据科学项目了解一下
  9. 一位老电子工程师的十年职场感悟
  10. java 表头固定,网页开发之Bootstrap-table固定表头并解决表头与内容不对齐
  11. 阿里云总监课第四期:阿里褚霸携专家团独家分享弹性计算最佳实践
  12. Java微信开发入门第一节(PC端、移动端、微信端区别)
  13. IT一族需警惕11钟“电脑病”
  14. springboot+thymeleaf实现邮件群发
  15. 《人生只有一次,去做自己喜欢的事》读书笔记
  16. 天池数据竞赛docker提交操作学习
  17. .Net深入学习:序列化
  18. 利用循环将循环变量 i 的值赋值给数组
  19. 文件服务器维修,中国直辖市服务器维修及数据恢复.docx
  20. 跑分软件测试原理,跑分软件测试性能提升幅度_平板电脑评测-中关村在线

热门文章

  1. C++中BEGIN_MSG_MAP或者BEGIN_MESSAGE_MAP的个人理解
  2. AMD: Developer Guides, Manuals ISA Documents
  3. DPDK examples ethtool-app完全注释
  4. es用python增加字段_使用Python在ElasticSearch中添加@timestamp字段
  5. 数学打比方(函数和卷积)
  6. Mybatis解析(面试题)
  7. 一级计算机电子表格试题,计算机一级考试电子表格题都是出什么样的题目或题型?以及幻灯片?【excel一级考试题目及解析】...
  8. 基于静态类型分析的java程序函数调用图构建方法研究,JAVA的静态方法调用
  9. Unity3d远程连接Hololens提示Cannot connect without a remote machine address specified
  10. mysql中的页与磁盘关系_数据库和磁盘阵列的关系