PAT Basic 1033. 旧键盘打字(20)
2015-06-17 09:45
369 查看
Python版本
AC,四个测试点全部通过。
Java版本
注意!Java这里有三个版本:
1、一个运行超时
2、一个内存超限
3、最后一个AC全部通过
分析原因:
1、运行超时。因为,每一次循环都有一个System.out.print(),而这是很耗时间的。
2、内存超限。改进,去除循环中的System.out.print(),用一个String变量s,然后s+=temp,最后一次性输出System.out.println(s),不再超时,但内存超限。
因为每次s+=temp,会在常量池中找,找不到,每次new一个String,导致内存超限
3、AC。将用String变量s,然后s+=temp的方法,改为用StringBuilder变量sb,进行sb.append()
1、Java版本,最后一个测试点超时。
2、Java版本,最后一测试点,内存超限
3、Java版本,AC,全部测试点通过
Python
Java
惊讶地发现Python的也很强大,比Java快!
AC,四个测试点全部通过。
line1 = list(raw_input()) line2 = list(raw_input()) dict ={} for c in line1: if c>='A' and c<='Z': dict[c.lower()]=c.lower() dict[c]=c s='' for c in line2: if (dict.get(c,-3)==-3): if c>='A' and c <='Z' and dict.get('+',-3)!=-3: continue s+=c print s
Java版本
注意!Java这里有三个版本:
1、一个运行超时
2、一个内存超限
3、最后一个AC全部通过
分析原因:
1、运行超时。因为,每一次循环都有一个System.out.print(),而这是很耗时间的。
2、内存超限。改进,去除循环中的System.out.print(),用一个String变量s,然后s+=temp,最后一次性输出System.out.println(s),不再超时,但内存超限。
因为每次s+=temp,会在常量池中找,找不到,每次new一个String,导致内存超限
3、AC。将用String变量s,然后s+=temp的方法,改为用StringBuilder变量sb,进行sb.append()
1、Java版本,最后一个测试点超时。
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc =new Scanner(System.in); char[] arr1 = sc.nextLine().toCharArray(); char[] arr2 = sc.nextLine().toCharArray(); int[] arr =new int[10000]; for(int i =0;i<arr1.length;i++){ char temp = arr1[i]; arr[temp]=1; if(temp>= 'A' && temp <= 'Z'){ arr[temp+32]=1; } } for(int i =0;i<arr2.length;i++){ char temp = arr2[i]; if(arr[temp]==0){ if( temp >='A' && temp<='Z' && arr['+']==1){ continue; } System.out.print(temp); } } } }
2、Java版本,最后一测试点,内存超限
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc =new Scanner(System.in); char[] arr1 = sc.nextLine().toCharArray(); char[] arr2 = sc.nextLine().toCharArray(); int[] arr =new int[10000]; for(int i =0;i<arr1.length;i++){ char temp = arr1[i]; arr[temp]=1; if(temp>= 'A' && temp <= 'Z'){ arr[temp+32]=1; } } String s=""; for(int i =0;i<arr2.length;i++){ char temp = arr2[i]; if(arr[temp]==0){ if( temp >='A' && temp<='Z' && arr['+']==1){ continue; } s+=temp; } } System.out.println(s); } }
3、Java版本,AC,全部测试点通过
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc =new Scanner(System.in); char[] arr1 = sc.nextLine().toCharArray(); char[] arr2 = sc.nextLine().toCharArray(); int[] arr =new int[10000]; for(int i =0;i<arr1.length;i++){ char temp = arr1[i]; arr[temp]=1; if(temp>= 'A' && temp <= 'Z'){ arr[temp+32]=1; } } StringBuilder sb =new StringBuilder(); for(int i =0;i<arr2.length;i++){ char temp = arr2[i]; if(arr[temp]==0){ if( temp >='A' && temp<='Z' && arr['+']==1){ continue; } sb.append(temp); } } System.out.print(sb.toString()); } }
Python
Java
惊讶地发现Python的也很强大,比Java快!
相关文章推荐
- 【Android】下拉列表、拖动条、星级评分条与标签文本的触摸事件
- android自定义Switch样式
- leetCode(5):Sort List
- 常用的算法函数
- opencv中ptr的使用
- leetCode(5):Sort List 分类: leetCode 2015-06-17 09:45 170人阅读 评论(0) 收藏
- 遇到The connection to adb is down, and a severe error has occured
- HTTP Status 500 - java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.pages.index.index_jsp
- VB实现禁用任务管理器的方法
- j2se学习笔记-Enum枚举类型
- C#实现ListView选中项向上或向下移动的方法
- input框只能输入大于0的数字,当值为0或者“”时会变成1
- JS学习笔记(一):关于{}和[]的使用
- android代码混淆之自定View问题
- 【转】KAFKA分布式消息系统
- Activity间数据传输
- 出大事了,据说微软要收购Docker?
- Linux基础(四):文本编辑器Vim
- UVa 11946 - Code Number
- Perl获取指定目录中的文件