您的位置:首页 > 其它

PAT Basic 1033. 旧键盘打字(20)

2015-06-17 09:45 369 查看
Python版本

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快!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: